一,TCP协议介绍
TCP(传输控制协议):先建立连接,在进行传输数据,同时具有重传功能
二,TCP报文格式
源端口号:发送方进程的端口号(那个应用程序发出来了)
有各种不同类型的应用程序,每个程序根据功能不同,会划分不同的端口编号
目标端口号:接收端进程的端口号,接收端收到数据段后,根据这个端口号来确定把数据
送个那个应用程序的进程
序号:发送端分片后为每个字节进行编号,便于接收端正确重组,保证数据正确性
确认号:用于确认发送端的信息(就是跟发送端说,接收端收到了)
首部长度:它可以确认TCP首部数据结构的字节长度
一般情况下TCP首部是20字节,但首部长度最大可以扩展为60字节
保留:为了特殊情况保留的字节长度
控制号:在我和目标服务器连接时每一个特殊状态的标识
URG:紧急位,紧急指针有效位,URG=1时提醒接收端指整段数据中有几个字节是紧急的(重要的)
ACK:确认请求,AcK(大小写 确认回复收到请求)
确认位,只有当ACK=1时,确认序列号字段才有效,ACK=0时,确认字段无效
PSH:急迫位,标志为1时,要求接受方尽快将数据段送达应用层
PSH=1时提醒接收端指整段数据都是紧急的(重要的)
RST:重置位,RST为1时,通知重新建立TCP连接
若传输时整段数据,有丢失并且找不回来就会用到RST重新连接传输
SYN:建立连接,同步(连接)位,同步序号位,TCP需要建立连接时将这个值设为1
FIN:断开连接,(断开位),当TCP完成传输数据传输需要断开连接时,提出断开连接方将这个值设为1
窗口大小:用于说明本地接收数据段的数目,窗口大小是可变的
网络好时窗口就会变大加快传输速度,网络差时窗口就会变小保证数据可靠传输,
TCP中的流量控制机制就是依赖变化窗口的大小实现的
校验和:用来做差错控制,字段检验的范围包括首部和数据这两部分,数据段在发送时和到达目的地时会进行
校验和计算,若这两次的校验一致,说明数据基本正确,否则会认为数据被破坏,接收端将丢弃该数据
紧急指针:和URG配合使用,当URG=1时有效
选项:在TGP首部可以有多达40字节的可选信息,例,最大报文长度MSS(最大段大小),MSS告诉对方
TCP:我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节
三,TCP三次握手(只是建立了可靠性较强的连接通道,发送数据获取数据还得靠IP MAC地址HTTP协议等发送接收)
TCP的建立连接的过程称为三次握手 pc1客户端(自己电脑) pc2服务端(百度服务器 )Seq(这段报文请求长度)
例:要访问百度服务器要先建立连接(连接是双向的),首先pc1要先向pc2发送SYN报文(Seq=x SYN=1)建立连接请求(第一次握手),pc2向pc1发送了两段SYN+ACK报文(Seq=y Ack=x+1 SYN=1 ACK=1),第一段是确认你向pc2建立连接请求(Seq=y Ack=x+1),二段是pc2向pc1建立连接请求(SYN=1 ACK=1)(第二次握手),pc1向pc2发送ACK报文(Seq=x+1 Ack=y+1 ACK)我收到了你的请求,确认pc2向pc1的连接请求(第三次握手)。
四,TCP四次挥手(TCP半断开概念)
TCP断开连接的过程称为四次挥手 pc1客户端(自己电脑) pc2服务端(百度服务器 )
断开连接(双向的要双方确认断开)
例:pc1向pc2发送确认断开连接请求报文(FIN=1,ACK=1)第一次挥手,pc2向pc1收到确认断开报文(ACK=1)第二次挥手,(但有个半断开连接过程(有可有数据没传输完),例:你向pc2访问下载的数据还没传输完成)下载完成后,pc2向pc1发送确认断开连接请求报文(FIN=1,ACK=1)第三次挥手,pc1向pc2发送报文(ACK=1)确认收到断开请求,第四次挥手,断开完成
为什么握手不是两次或四次
因为:如果两次的话就只是单方面连接了,pc1只能向pc2传输,pc2回应不回来,所以要三次握手双向确认
为什么不四次呢因为:为了节省占用资源(很少的话影响不大,多了就不可以)
UDP(用户数据包协议):无需建立连接,更多注重传输速度,效率更高,不稳定,花费开销小
常见的TCP端口号及功能
FTP(21):FTP服务器所开放的控制的端口
TELNET(23):用于远程登录,可以远程控制管理目标计算机
SMTP(25):SMTP服务器开放的端口,用于发送邮件
HTTP(80):超文本传输协议,明文传输
HTTPS(443):超文本传输协议,密文传输
于远程登录,可以远程控制管理目标计算机
SMTP(25):SMTP服务器开放的端口,用于发送邮件
HTTP(80):超文本传输协议,明文传输
HTTPS(443):超文本传输协议,密文传输
POP3(110):用于邮件的接收