????????1、定义:为主机:提供端到端的连接;为网络层:提供TCP和UDP服务;
????????2、作用:
????????提供面向连接或无连接的服务;
????????维护连接状态;
????????对应用层数据进行分段和封装;
????????实现多路复用;
????????可靠地传输数据;
????????3、TCP和UDP的区别
????????TCP(Transmission Control Protocol):面向连接;"流式传输"
????????UDP(User Datagram Protocol):无连接,不可靠;
????????对方在吗?对方收到了吗?对方收到的信息正确的吗?
????????Source Port | Destination Port
????????源端口、目的端口;
????????端口:每个应用程序进出网络都需要经过一个唯一端口,通过端口来识别数据交由哪个应用程序处理;
????????服务端:固定端口号0~1023;客户端:1024以上随机端口;
????????命令:netstat -a
????????Sequence Number | Acknowledgement Number
????????Sequence Number 序列号
????????Acknowledgement Number 确认号
????????Data Offset | Reserved
????????Data Offset(数据偏移):标识数据分段在完整数据中的位置,进行数据重组;
????????Reserved(保留位):闲置;
????????Flags 标志位
????????URG(紧急指针字段标志):紧急开关位,优先转发;(紧急指针)
????????ACK(确认字段标志):标识字节流;
????????PSH(推功能):直接提交缓存数据,在缓存区中立即结束上传给应用层;
????????RST(重置连接):无法正常连接,死机、断线;
????????SYN(协商位、同步序列号):确认号;
????????FIN(数据传送完毕):标识结束—四次挥手;
????????Window
????????窗口尺寸:滑动机制,用来通告本机的接收能力;
????????问题:丢包重传
????????Checksum | Options | Padding
????????Checksum:Hash校验
????????1、工作机制
????????seq:序列号,随机产生;
????????ack:确认号;
????????① 主机A向主机B发送请求,第一个数据包,产生一个seq:a;(无ack)
????????② 主机B回应主机A,a. 确认收到,产生一个ack:a+1;b. 产生一个seq;
????????③ 主机A回应主机B,对该确认再做确,再产生序列号;ack:a+1; seq:b+1;
????????④ 主机B收到主机A的确认报文后,连接建立;
????????例子:两个人打招呼;
????????2、确认重传机制
????????若数据包检测有错误,利用确认号,让对方再发一次
????????3、现实应用场景
????????TCP不要求对每个段一对一地发送确认,接收端可以用一个ACK确认之前收到的所有数据。
????????FIN(Finish Segment):结束段;
????????工作机制
????????① 主机A向主机B发送FIN,请求结束
????????② 主机B向主机A回应: a. ACK确认收到请求,b. FIN请求结束
????????③ 主机A向主机B回应ACK,确认结束
????????目的:实现流量控制;
????????工作机制:使用大小可变的滑动窗口,定义窗口尺寸的通告;
????????1、功能:实现数据报模型的分组交换计算机网络通信而设计的;无连接、不可靠;
????????2、UDP的头格式
????????1、TCP:
????????优点:传输可靠性高;
????????缺点:占用带宽高,传输延迟高;
????????应用场景:对数据完整性要求高,但对传输延迟要求低;
????????2、UDP:
????????优点:占用带宽低,传输延迟低;
????????缺点:没有任何可靠机制;
????????应用场景:对传输延迟要求高,但数据完整性要求低