传输层协议介绍

TCPUDP协议

TCP/IP协议族的传输层协议

TCPTransmission Control Protocol)传输控制协议

UDPUser Datagram Protocol)用户数据报协议

 

  

 

TCP/IPOSI模型的比较

●相同点

两者都是以协议栈的概念为基础

协议栈中的协议彼此相互独立

下层对上层提供服务

●不同点

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个即655360-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 valueWindow 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)发送给PC2PC2收到报文后,会将Ack+1,再发送一个同步位给到PC1,进行确认,此时PC1接到PC2的报文,于是再次发送同步位Seq+1

例如:A打电话给B,两方需先建立连接,A需要交代自己是谁,确认对方是谁后开始交流

 

 

 

 

 

三次握手是建力连接的过程

客户端像服务端发起链接时,先发一包连接请求数据,过去询问能否与之建力连接,这包数据称之为SYN包,如果对方同意连接,责会回复一包SYN+ACK包,客户端收到之后回复一包ACK包,连接建力。三次握手就是为了解决网络信道不可靠的问题,在不可靠的信道上建力可靠的连接。

首先,客户A和服务器B,客户A会主动打开链接接口,首先要发送一个同步信息,这个同步信息只有当SYN=1的时候才会发送,然后生成一个序号,代表这个报文的序号x,然后我发送给服务器端,这时候,服务器端的SYN=1是不会变的,因为要进行同步,只有101代表同步,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包,并刷新超时时间

posted @   HuYang~  阅读(454)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示