TCP/IP

TCP/IP

 封装传输层:TCP和UDP---1·TCP是面向连接的协议,而UDP是无连接的协议;

2·TCP协议的传输是可靠的,UDP协议的传输是尽力而为的;

3·TCP协议可实现流控,而UDP不能;

4·TCP协议可以分段,而UDP不行;

5·UDP传输效率快,消耗资源较小;TCP消耗资源大,传输效率慢。

所以,当传输文件为视频,游戏等对速度要求高,但是对可靠性要求较低的即时通讯类时,使用UDP;而传输文件对可靠性要求高,但是对传输效率和资源占用要求较低时,使用TCP;

什么是面向连接:在正式传输数据前,先使用预先的协议,建立点到点的连接;

TCP的连接实际建立了一个双向的会话连接,即通讯双方都可以向对方发送数据。

封装和解封装图解:

TCP和UDP的头部封装:

TCP头部(最短20字节头---1字节=8位):

因为存在选项字段,所以TCP头部长度是可以变化的,被称为可变长头部。

URG:紧急标记位,此位置1时,代表有需要紧急处理的数据,此时紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的)

ACK:确认标记位。表示发来的数据已确认接收无误。

TCP/IP协议中,如果接收方成功的接收到数据,那么会回复一个ACK数据。通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。

PSH:数据中某个数据段的该标记位置1 时,该数据段将不在缓存空间中滞留,会优先推给应用程序处理。

RST:若一方发送的数据包中该位置1的话,那么TCP会话将会被强制断开。

SVN:请求标记位,此位置1表明请求建立连接。

FIN当两端交换带有FIN标志的TCP报文段并且每一端都确认另一端发送的FIN包时,TCP连接将会关闭。FIN位字面上的意思是连接一方再也没有更多新的数据发送。然而,那些重传的数据会被传送,直到接收端确认所有的信息。

校验和:确保数据完整性。

伪头部校验---除了校验TCP头部和数据内容外,还会将网络层头部中的一部分内容一起校验。校验强度较高;

UDP头部(8字节头):

UDP长度:头部长度加数据长度,即数据段长度;

TCP和UDP对比:

1·TCP是面向连接的协议,而UDP是无连接的协议---连接建立:

 TCP与UDP的三次握手与四次挥手:

1·三次握手---TCP建立连接的过程:

第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SEND 状态。

首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。

第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s)。同时会把客户端的 ISN + 1 作为ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。

在确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。

第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED (已建立)状态,此时,双方已建立起了连接。

确认报文段ACK=1,确认号ack=y+1,序号seq=x+1(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。

TCP的四次挥手---TCP会话的断开:

第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态。

即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。

第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。

即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。

第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。

即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。

即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。

为什么建立连接是三次而断开连接是四次?

挥手时,由于数据传输量可能不同,所以在ACK置1时由于数据可能还未发完,所以FIN不能同ACK一起发送,所以需要经历四次挥手;而握手时跟数据传输无关,所以ACK可以与SVN一同发送,只需经历三次握手即可。

2·TCP协议的传输是可靠的,UDP协议的传输是尽力而为的:

TCP的可靠性保证----确认,重传,排序,流控

流控---需要依靠窗口大小---流控是在通信过程中,为了防止数据丢失而采取的一种平衡发送和接收的机制

滑动窗口---传送数据过程中,一方发送数据包并给定一个窗口值,若另一方有能力处理,则回以相同的窗口值;该方会逐渐增加数据包直至到达另一方的处理上限,另一方回以处理上限窗口值,溢出未处理的数据包将在下一轮重新发出。(另一方回的数据包中,ACK=1,acknumber=窗口值+1)

3·TCP协议可实现流控,而UDP不能(解释如上)

4·TCP协议可以分段,而UDP不行---TCP有序号,所以可以实现拆分;

5·UDP传输效率快,消耗资源较小;TCP消耗资源大,传输效率慢

(网络层)IP协议—

IP头部图解:

协议号---上层所使用的协议类型—TCP(6),UDP(17)---传输时会用数字代表协议类型,每种协议有一个对应的数字;

IP的分片和TCP的分段(最根本是因为MTU的限制)

MTU----最大传输长度---默认1500字节:最大传输单元MTU(Maximum Transmission Unit,MTU),是指网络能够传输的最大数据包大小,以字节为单位。MTU的大小决定了发送端一次能够发送报文的最大字节数。

MSS---最大段长度----理论值(1460字节,此值需要协商,此参数在TCP的SYN包携带,若双方不一致,则将按照小的执行。)---最大报文段长度(MSS)是TCP协议的一个选项,用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括文段头)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值