计算机网络之传输层
作者:互联网
一.UDP协议详解
UDP(User Datagram Protocol: 用户数据报协议)
UDP是一个非常简单的协议
UDP协议对其数据报内容不合并,不拆分,原样传输。同样的,UDP协议=UDP首部+UDP数据报数据
UDP是无连接协议,也就是说并不需要两方建立连接,UDP不能保证可靠的交付,数据丢失没有控制机制。UDP是面向报文传输(不拆分不合并)的,首部开销很小。
二.TCP协议
TCP(Transmission Control Protocol: 传输控制协议)
TCP协议是计算机网络中非常复杂的一个协议
◆ TCP是面向连接的协议 ◆ TCP的一个连接有两端(点对点通信) ◆ TCP提供可靠的传输服务
◆ TCP协议提供全双工(双方都可向对方发送数据)的通信 ◆ TCP是面向字节流的协议
序号:◆ 0~2^32-1 ◆ 一个字节一个序号 ◆ 数据首字节序号 就是tcp数据报的首字节
确认号:◆ 0~2^32-1 ◆ 一个字节一个序号 ◆ 期望收到数据的首字节序号
数据偏移:◆ 占4位:0~15,单位为:32位字 ◆ 数据偏离首部的距离 最大为4*15=60
TCP标记:占6位,
窗口:指明允许对方发送的数据量
紧急指针:◆ 紧急数据(URG=1) ◆ 指定紧急数据在报文的位置
TCP选项:◆ 最多40字节 ◆ 支持未来的拓展
TCP协议的可靠性传输:
◆ 停止等待协议
◆ 连续ARQ协议
停止等待协议:发送方发送消息后停止生成消息,等待接收方的确认消息,如果出差错的话超时重传
停止等待协议的改进:超时定时器
每发送一个消息设置一个超时定时器,超时的话重传消息,缺点是对信道的利用率不高。
为提高信道的利用率,进行信息的批量确认
连续ARQ协议:(Automatic Repeat reQuest:自动重传请求)
滑动窗口:只要确认消息到达就会把窗口向前推动。
累计确认:只要收到第N个确认消息就会认为N之前的消息都收到了。
如果25 ,27 收到了确认消息那么就从23开始重传接收到确认消息后把窗后后移2个字节。也就是确认后就把窗口滑动,而没确认的重传
◆ 选择重传需要指定需要重传的字节 ◆ 每一个字节都有唯一的32位序号
TCP协议的流量控制:
◆ 流量控制指让发送方发送速率不要太快 ◆ 流量控制是使用滑动窗口来实现的
坚持定时器 :◆ 当接收到窗口为0的消息,则启动坚持定时器 ◆ 坚持定时器每隔一段时间发送一个窗口探测报文
TCP协议的拥塞控制:
◆ 流量控制考虑点对点的通信量的控制 ◆ 拥塞控制考虑整个网络,是全局性的考虑
报文超时就认为是拥塞状态。
算法:
慢启动算法:从小到大增加发送的数据量,每收到一个报文确认就加一发送的数据量,慢启动算法的阈值到达后启动拥塞避免算法
拥塞避免算法:维护一个拥塞窗口的变量,只要报文不超时就试探性的增大窗口
TCP连接的三次握手:
发送方发出一个tcp标记为SYN=1的报文,发送之后发送方处于同步已发送状态,接收方收到报文之前是监听的状态,接收到报文之后,接收方发出一个TCP标记SYN=1,ACK=1 的报文表示确认,在第三次报文发送过来之前,此时接收方处于同步已接收的状态。
发送方收到这个报文之后,再发出第三次tcp标记ACK=1的报文,接收方收到报文建立链接。
为什么发送第三次报文:◆ 已经失效的连接请求报文传送到对方,会引起错误
TCP链接的挥手:
发送方发出一个TCP标记为FIN=1 的报文,此是发送方处在FIN-WAIT-1等待状态,接收方收到这个报文以后,给发送方发出一个ACK=1的确认报文,此时接收方处在关闭等待状态,这是接收方还是可以发送数据给发送方,等到数据发送方完成之后,接收方会发送一个ACK=1,FIN=1的报文。此时接收方处于最后确认状态,发送方接收到这个报文之后发出ACK=1的报文,启动等待计时器,等接收方接收报文之后,就处于关闭状态。
等待计时器:等待2MSL的时间
MSL是最长报文段寿命,一般网络MSL设置为2分钟
为什么需要等待2MSL?
确保最后一次挥手的ACK可以到达接收方,如果2MSL时间内没有收到,接收方就会重发报文。
确保当前所有连接的报文都已经过期。
套接字与套接字变成
套接字(Socket)是抽象概念,表示TCP连接的一端{ip:port}表示TCP连接的一端。
服务端创建套接字,绑定套接字,监听套接字,然后接受处理信息。
客户端创建套接字,连接套接字,之后发送信息。
标签:发送,UDP,协议,报文,TCP,计算机网络,传输层,接收 来源: https://www.cnblogs.com/buttertofree/p/16425212.html