前言
其实这一部分最重要的是三次握手四次挥手
但是别的也都大概看看吧 了解一下
也会写一些关于面试这方面的问题
概述
只有主机在有的层次
为应用层提供通信服务
并且可以使用网络层提供的服务
传输层的功能
- 传输层提供给进程与进程之间的逻辑通信
1. 与网络层的区别是 网络层是为主机与主机之间的通信提供服务 所以一般到网络层的时候 数据传输是还没有完成的
2. 从网络层来说 通信的双方是两台主机 IP数据报的头部给出了这两台主机的IP地址
3. 但“两台主机之间的通信”实际上是两台主机中的应用进程之间的通信 应用进程之间的通信又称端到端的逻辑通信
4. “逻辑通信”意思是传输层之间的通信好像是沿水平方向发送数据 实际上是自上而下的数据封装之后发送到目的主机然后再自下而上解封装 - 复用和分用
1. 复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据
2. 分用是指接受方的传输层在剥去报文的头部之后能够正确把这些数据交付到目的应用进程
3. 注意 传输层的复用分用和网络层的复用分用功能不同
4. 网络层的复用是指发送方不同协议的数据都可以封装成IP数据报发送出去
5. 网络层的分用是指接收方的网络层在剥去头部之后把数据交付给相应的协议 - 传输层对收到的报文进行差错检测
1. 传输层会检查报文的头部和数据部分
2. 网络层只检查报文的头部 不会检查数据部分是否出错 - 传输层的两种协议 : TCP UDP
1.网络层无法同时实现这两种协议 要么只提供面向连接的服务 要么只提供无连接服务
传输层的两种协议
大概说一下
后面详细说
TCP
面向连接的传输控制协议
传送数据之前必须建立连接
数据传送结束后要释放连接
不提供广播或多播服务
由于TCP要提供可靠的面向连接的传输服务
因此不可避免增加了需要开销 : 确认、流量控制、计时器以及连接管理等
由于是面向连接的
所以比较可靠
但是时延比较大
适用于大文件
UDP
无连接的用户数据报协议UDP
传输数据之前不需要建立连接
收到UDP报文后也不需要给出任何确认
因为无连接
所以不太可靠
但是时延小
适用于小文件
比如一个小表情包之类的
传输层的寻址与端口
复用 : 应用层所有的应用进程都可以通过传输层再传输到网络层
分用 : 传输层从网络层收到数据后交付指明的应用进程
那么分用时如何指明呢 需要一个唯一的标识 叫做端口
端口
- 端口是传输层的SAP 标识主机中的应用进程
- 端口有一个唯一的标识叫做端口号
- 端口号只有本地意义 在因特网中不同计算机的相同端口是没有联系的
- 端口号长度为16bit 能表示65536个不同的端口号
- 传输层使用的是软件端口
- 硬件端口是不同硬件设备进行交互的接口 软件接口是应用层的各种协议进程与传输实体进行层间交互的一种地址
- 数据链路层的SAP是MAC地址 网络层的SAP是IP地址 传输层的SAP是端口
按照端口号的范围有服务端使用的端口号和客户端使用的端口号
- 客户端口号在一个进程结束的时候就可以分配给另一个进程 是可以复用的
- 熟知端口号是固定的 见下图
套接字
- 在网络中采用发送方和接收方的套接字组合来识别端点
- 套接字唯一标识了网络中的一个主机和它的一个进程
UDP协议
主要特点
- UDP是无连接的 减少开销和发送数据之前的时延
- UDP使用最大努力交付 即不保证可靠交付
- UDP是面向报文的 适合一次性传输少量数据的网络应用
- UDP无拥塞控制 适合很多实时应用
- UDP头部开销小 8B 而TCP是20B
这里可以看到
应用层给UDP多长的报文 UDP就照样发送 即一次发一个完整报文
是不会对应用层的报文进行修改的
如果应用层的报文太大的话 就会导致网络层的IP数据报过大
会使IP数据报分片 影响网络层的效率
如果应用的报文太小的话 就会导致网络层的IP数据报数据部分比IP头部还小
也会影响网络层的效率
UDP首部格式
8个字节的首部字段
其余部分为数据字段 当然数据字段是可以为0的
所以UDP数据报最小就是8个字节
16位源端口号是可有可无的
比如当前数据报不需要回复的话
源端口号就可以全为0
16位目的端口号是必须有的
需要指明当前数据报要发给谁
16位UDP长度是整个数据报的长度
16位UDP检测和
检测整个UDP数据报是否有错 错就丢弃
分用时 找不到对应的目的端口号 就丢弃报文
并给发送方发送ICMP “端口不可达”的差错报告报文