传输层概述
基本作用:
用于提供两台主机的应用进程之间进行端到端的逻辑通信
传输层与网络层的区别:
网络层更多的是两台主机之间的通信,无法更具体地区分出是哪两个应用程序之间的通讯
也就是说,当数据传输过来后通过传输层将数据报的信息传递给不同的应用
传输层的复用和分用
在发送信息时,进程通过传输层将数据都封装在IP数据报中;在接收信息时,传输层将IP数据报中的信息解析,分配给不同的进程
端口
作用:
端口是应用层进程的标识,是一个虚拟概念。数据发送时,由端口向下交付给传输层;接收数据时,由端口向上交付给应用层
分类
端口通常是16位的,也就是说最多可以允许有65536个端口号
熟知端口:数值一般在0~1023,是TCP/IP体系确认并发布的
一般端口:用于随时分配给请求通信的客户进程
一些常用进程的默认端口
套接字
套接字 = IP地址 + 端口号
通过套接字就可以将信息送达至目的主机的指定进程了
五元组 = <源IP地址,源端口,目的IP地址,目的端口,传输协议>
这样就可以确定唯一的通信连接
TCP和UDP传输协议
无连接服务和面向连接服务
TCP与UDP协议的比较
UDP特点 | TCP特点 |
---|---|
无连接 | 面向连接的 |
不可靠的服务 | 可靠的服务 |
点到点和多点通信 | 点到点的通信 |
首部8字节 | 首部固定部分20字节 |
面向报文 | 面向字节流 |
协议选择
应用层协议强调方面 | 传输层协议选择 |
---|---|
数据传输的可靠性 | TCP协议 |
实时应用要求 | UDP协议 |
举个例子:
比如传输的内容为语音信息,我们不可能等待上一秒的语音传过来之后再进行回复,这就要求传输的一种实时性,因而采用UDP协议更合适
而对于一些图片,文字的信息,实时性并不那么强,对方的信息我们可以等一会在回复,这时我们更希望传达过来的信息是准确的,不要造成误解,这对于信息的准确性要求更高,因此适合采用TCP协议
UDP协议
UDP协议格式
UDP数据报 = UDP首部 + UDP数据部分
UDP首部 = 源端口 + 目的端口(具有本地意义,要结合IP地址) + 长度(包括首部)+ 校验和
每部分占两个字节,因此首部一共八个字节
TCP协议
TCP报文格式
概述
首部部分
要有一个意识:TCP/IP协议可能对数据部分进行分片,且每部分分片
很可能不是按照顺序到达目的主机
源端口:略,与UDP类似
目的端口:略,与UDP类似
序号:本报文段所发送的数据部分的第一个字节的序号(TCP数据部分的每一个字节都有序号)
确认号:与序号配对使用,期望受到的下一个报文首部的序号字段的值,具有累计确认效果(若此序号为n,则表明前n-1个字节全部被正确收到)
数据偏移:类似于IP数据报首部中的首部长度部分,同样其单位是四个字节
URG~FIN部分:六个标志位,
URG——紧急标志位,报文中包含紧急字段置1,与后面的紧急指针部分对应
ACK——确认号字段,为0表示不包含确认号信息
PSH——置1表示数据应该直接送给应用程序,不必缓存
PST——TCP链接出现严重错误,必须释放连接
SYN——同步序号(课件里面讲的什么鬼???)
FIN——置1表示发送方已经完成发送任务
窗口:表明当前允许发送方发送的数据量,单位是1字节,是接收方对发送方的控制,以能够来得及接收
检验和:用来检查TCP的首部,数据以及TCP的伪首部
紧急指针:表明本报文段紧急数据的字节数
TCP三次握手
真是懒得再写了
这里直接贴一个知乎老哥的链接,讲得很好
https://zhuanlan.zhihu.com/p/92599886
TCP释放的四次握手过程
简而言之,就是
第一次,主机B向A发送结束请求
第二次,主机A向B回应请求,此时A不再接受B的消息,但是A向B发送消息时,B仍然接收
第三次,主机A向主机B发送结束请求
第四次,主机B向A回应请求,此时连接彻底中断