计算机网络
OSI七层模型与TCP/IP五层模型
OSI七层模型(自下而上):
物理层 -> 数据链路层 -> 网络层 -> 运输层 -> 会话层 -> 表示层 -> 应用层
TCP/IP五层模型
物理层 -> 链路数据层 -> 网络层(IP) -> 运输层(TCP/UDP) -> 应用层
三次握手
seq:包序列号
ack:包序列号确认号 (对端该发seq+1个数据包了-问对端要seq+1个数据包)
ACK:0[请求数据包] 1[确认数据包]
SYN: 只有在TCP 建立连接的前两次有意义 [即SYN=1]
TCP 连接请求 SYN=1 ACK=0[客户端第一请求]
TCP 连接确认 SYN=1 ACK=0[服务器返回第一次确认]
确认的确认、传输数据的TCP数据包 SYNC=0
①[c -(SYN ACK seq我要链接咯)-> s] ②[s -(SYN ACK seq ack 你确定要链接吗?)-> c] ③[c -(ACK seq ack [确认]是的,我要链接.)->s ]
为什么是三次握手而不是两次?
“三次握手” 的目的是 “为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。 -- 《计算机网络》 谢希仁著.
TCP是全双工协议,任何信道的传输本身来说都不是绝对可靠的,为确保建立的信道可靠至少需要三次的确认性的通讯.第一次是发起者向接收者询问状态,第二次是接收者确认发起者状态,第三次则是双方达成协议.即发起者确认与接收者建立通讯.而在这三次确认性的通讯期间传输 SYN ACK seq ack 状态校验码值得变动便是双建立同时所做的数学上的协商校验.因为如果中间得校验码值在任何一方校验失败,此次通讯都不会被建立.
四次挥手
为什么是四次挥手
TCP连接是全双工的,因此每个方向都需要进行独立关闭.客户端从开始关闭到完全关闭中间会经历四次状态变动,分别是 ①[established->fin-wait-1] ②[fin-wait-1->fin-wait-2] ③[fin-wait-2->time-wait] ④[time-wait-closed]
服务端从开始关闭到完全关闭中间会经历三次状态变动: ①[established-close-wait] ②[close-wait-last-ack] ③[last-ack-closed]
四次挥手是双方状态相互确认的一个过程中间缺一不可.
C: established -> fin-wait-1 -> fin-wait-2 -> time-wait -> closed.
S: established -> close-wait -> last-ack -> closed.
TCP
TCP和UDP区别
①TCP是面向连接的通讯的,TCP是长连接,UDP是短连接
②TCP是1对1连接,UDP可以是多对多交互通讯
③TCP是可靠传输因为建立连接和关闭连接前会双方都会做对自身和端状态确认.UDP则没有这一过程,所以UDP是不可靠传输.
④TCP是面向字节流传输,UDP是面向报文传输.
⑤TCP首部开销大于UDP首部开销.
TCP滑动窗口协议
滑动窗口解决的是流量控制的的问题,就是如果接收端和发送端对数据包的处理速度不同,如何让双方达成一致。窗口大小代表了设备一次能从对端处理多少数据,之后再传给应用层。缓存传给应用层的数据不能是乱序的,窗口机制保证了这一点。
TCP握手以及每一次握手客户端和服务器端处于哪个状态(11种状态)
TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)?
1.TCP是面向字节流的通讯.
2.TCP通讯时设立的多种校验机制和拥塞控制、超时重传等机制保证.
TCP/IP的分片粘包过程
TCP对于发送缓冲区数据发送并不是即时发送的,而是定时定量发送的,即数据在一定时间内发送缓冲区内的数据如果大到发送大小就会立即发送并不会关进数据包是否完整.在这样的机制下就有可能会出现粘包现象,即在发送缓存区中的数据有可能是由几个包和一个不完整的包组成的TCP数据包,当缓冲区被数据填满就会被立即发送.
UDP
UDP(短链接) 一种面向报文的无连接传输层协议,提供的是不可靠传输协议.UDP正式通信前不会做双方协商确认,不关心数据传输状态,只管发包,收包,不做校验.
正是由于UDP协议不关心网络传输等一系列状况,使得UDP协议在数据传输过程中节省大量的网络状态确认和数据校验的系统资源消耗,大大提升了UDP的传输效率,传输速度明显快于TCP.
为什么不考虑TCP做音视频传输?
TCP是面向连接的,可靠的传输协议,所以在连接建立前会做双方的协商确认,在发送数据是会做类似签名的过程,收包时会做包校验,在发送失败是时还会做超时重传.以上这些机制加上流量控制机制还有频繁的确认校验过程会使得音视频的接受效率大大降低.音视频注重的时即时性,TCP的特性决定了音视频的即时性注定无法与UDP相比.
音视频传输特点
1.传输时延要求小,实时性要求高.
2.传输流量大,要求传输效率高
3.在一定范围内允许丢包或是传输错误.
所以UDP更理想.