传输层协议介绍
TCP和UDP协议
TCP/IP协议族的传输层协议
TCP(Transmission Control Protocol)传输控制协议
UDP(User Datagram Protocol)用户数据报协议
TCP/IP和OSI模型的比较
●相同点
两者都是以协议栈的概念为基础
协议栈中的协议彼此相互独立
下层对上层提供服务
●不同点
OSI是先有模型,TCP/IP是先有协议,后有模型
OSI是国际标准,适用于各种协议栈,TCP/IP实际标准,只适用于TCP/IP网络
层次数量不同
TCP协议
TCP是面向连接的,可靠的进程到进程通信的协议
TCP提供全双工服务,即数据可在同一时间双向传输
TCP报文段
TCP将若干个字节组成一个分组,叫报文段(Segment)
TCP报文段封装在IP数据报中
面向连接网络协议:是指通信双方之间在进行通信之前要先建立连接,比如打电话,双方通话前需要先建立连接,等数据发送结束后,双方再断开连接。
无连接网络协议:是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包送到网络线路上,由系统自主选定路线进行传输,比如:QQ发送信息
TCP面向连接的协议:TCP是面向连接的,可靠的进程到进程通信的协议。TCP提供全双工服务即数据可在同一时间双向传输,每一个TCP都有发送缓存和接受缓存,用来临时存储数据
UDP协议是无连接,不保证可靠的传输层协议,发送端不关心发送的数据是否到达目标主机,数据是否出错等,收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障,传输数据速度更快,效率更高
TCP传输会比较慢,会报错
UDP传输会比较快,不会报错
速度快会牺牲可靠性,慢的可靠性会高
需求需要根据具体状况具体分析
TCP特性
工作在传输层
面向连接协议
全双工协议
半关闭
错误检查
将数据打包成段,排序
确认机制
数据恢复,重传
流量控制,滑动窗口
拥塞控制,慢启动和拥塞避免算法
TCP报文段
SYN:同步序号位,TCP需要建立连接时将该值设为1
ACK:确认序号位,当该位为1时,用于确认发送方的数据
FIN:当TCP断开连接时将该位置为1
源端口,目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过制定源端口和目标端口,就可以知道哪两个进程需要通信,源端口,目标端口是用16位表示的,可推算计算机的端口数位2^16个即65536(0-65535)
序列号:表示本报文段所发送的数据第一个字节的编号,在TCP连接中所传送的字节流的每一个字节都会按顺序编号,由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0开始
确认号:表示接受方期望收到发送方下一个报文段的第一个字节数据的编号,也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号:传输是否有问题?
数据偏移/首部长度:表示TCP报文段的首部长度,工四位,由于TCP首部包含一个长度可变的选项部分,需要制定这个TCP报文段到底有多长,它指出TCP报文段的数据起始处距离TCP报告段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
控制位
URG(紧急位):
ACK(却认为):
PSH(急切位):
RST(重置位):
SYN(同步位):
FIN(断开位):
窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后再继续传送后面数据,由Window size value※Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
校验和:提供额外的可靠性紧急指针,标记紧急数据在数据字段中的位置
选项部分:其最大长达可根据TCP首部长度进行推算,TCP首部长度用4位表示,选项部分最长位(2^4-1)·4-20=40字节
※重点
TCP连接4-1
TCP建立连接的过程称为三次握手
首先PC1想和PC2通讯,第一次先发送一个SYN报文(Seq=x,SYN=1)发送给PC2,PC2收到报文后,会将Ack+1,再发送一个同步位给到PC1,进行确认,此时PC1接到PC2的报文,于是再次发送同步位Seq+1
例如:A打电话给B,两方需先建立连接,A需要交代自己是谁,确认对方是谁后开始交流
三次握手是建力连接的过程
客户端像服务端发起链接时,先发一包连接请求数据,过去询问能否与之建力连接,这包数据称之为SYN包,如果对方同意连接,责会回复一包SYN+ACK包,客户端收到之后回复一包ACK包,连接建力。三次握手就是为了解决网络信道不可靠的问题,在不可靠的信道上建力可靠的连接。
首先,客户A和服务器B,客户A会主动打开链接接口,首先要发送一个同步信息,这个同步信息只有当SYN=1的时候才会发送,然后生成一个序号,代表这个报文的序号x,然后我发送给服务器端,这时候,服务器端的SYN=1是不会变的,因为要进行同步,只有1和0,1代表同步,0代表不同步,ACK=1就是我确定收到了你需要同步的消息,同意跟你链接,此时会产生一个随机的Sep序号y,这个序号也是随机的,此时服务器B端需要回复对面一个ACK,希望下次发送一个x+1序号的报文过来,这是客户端接受到服务器端序号为y的报文,客户端A自己会形成一个ACK,同意跟服务器B进行连接,并且序号就为x+1,并形成Ack,
希望下次服务器B发过来的序号为y+1,这时候客户端A和服务器B就可以进行传输
四次挥手,处于连接状态下的客户端和服务端都可以发起关闭连接请求,假设客户端主动发起关闭连接请求,他需要像服务端发起一个FIN包,表示要关闭连接,自己进入终止等待1状态,这是第一次挥手,服务端收到FIN包,发送一包ACK包,表示自己进入关闭等待状态,客户端进入终止等待2状态,这是第二次挥手,服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据之后,发送一包FIN包,进入最后确认状态,这是第三次挥手,客户端收到之后,回复ACK包,进入超时等待状态,经过超时时间后关闭连接,服务端收到ACK包后立即关闭连接,这是第四次挥手。为什么客户端需要超时等待时间,这是为了保障对方已收到ACK包,假如客户端释放完最后一包ACK包后就释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态,如果客户端发送最后一包ACK包后,等待一段时间,这时服务端因为没有收到ACK包会重发FIN包,客户端会响应这个FIN包重发ACK包,并刷新超时时间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律