TCP/IP 学习

TCP报文结构

TCP报文结构

首部长度:一般为20字节,选项最多40字节,限制60字节。

源端口、目的端口

序号:TCP协议面向字节流,传输文件按顺序在缓存里面分块存放,要组建数据包,一块一块的往外发,加上IP,Mac等。序号就是指这个数据包的编号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000。

确认号:接收端缓存中收到数据包,然后去掉头,给发送端一个确认,我收到的数据包的最后一个字节。确认号是服务器告诉客户端该发以第几个字节为头的数据包。只要一确认,该确认的数据就会从缓存里面删掉。

数据偏移:是用来记录TCP报文段第多少个字节后,就开始是数据部分。首部最长可以60个字节。

6位标志URG表示紧急指针是否有效,URG为1的数据包可以插队,优先发。

ACK表示确认号是否有效。PSH为1的数据包优先从接收缓存发给接收方。RST为1,表示TCP出现严重错误,要求对方重新连接。SYN表示请求建立一个连接。FIN表示通知对方本端要关闭连接。

窗口:A和B通信时,B要告诉A他的接收缓存是多少字节。A设置发送缓存的大小。两边缓存最好一样。缓存多少字节,就是窗口大小。

检验和:由发送端填充,接收端对报文段执行CRC(循环冗余校验,利用除法及余数的原理来作错误侦测)算法以检验TCP报文段在传输中是否损坏。

紧急指针URG校验位为1才有作用,紧急指针为50,就是1-50个字节是要紧急处理的。

选项:长度可变,最长可达40字节。

TCP 建立和释放连接

tcp连接

SYN(synchronous建立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)

建立过程:
三次握手

第一次握手:
Client的应用进程主动打开,将标志位SYN置为1,随机产生一个seq=x,并将数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

第二次握手:
Server应用进程被动打开,Server收到数据包后由标志位SYN=1知道Client请求建立连接,若同意客户端的请求,则发回确认报文,Server将标志位SYN和ACK都置为1,ack(number)=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:
Client收到确认报文之后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,通知上层应用进程连接已建立,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

为什么是三次握手?
在假想的TCP建立的连接时二次握手过程中,Client发送Server发送一个SYN请求帧,Server收到后发送了确认应答SYN+ACK帧。按照两次握手的协定,Server认为连接已经成功地建立了,可以开始发送数据帧。这个过程中,如果确认应答SYN+ACK帧在传输中被丢失,Client认为连接还未建立成功,将忽略Server发来的任何数据分组,会一直等待Server的SYN+ACK确认应答帧。

断开连接过程:
四次挥手

第一次挥手:
数据传输结束以后,Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:
Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),此时本次连接就进入了半关闭状态,客户端不再向服务器发送数据。而服务器端仍会继续发送。Server进入CLOSE_WAIT状态。

第三次挥手:
若服务器已经没有要向客户端发送的数据,其应用进程就通知Server释放TCP连接,Server发送一个FIN,用来关闭Server到Client的数据传送。Server进入LAST_ACK状态。

第四次挥手:
Client收到FIN后,Client进入TIMEWAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

为什么是四次挥手
由于TCP的半关闭特性,TCP连接时数据在两个方向上能同时传递,因此,每个方向必须单独的进行关闭。所以4次挥手是为了保证双方都能传输完自己的数据,防止一方没有传输完数据的情况下,另一方中断连接导致数据丢失!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值