Advertisement

TCP/IP五层(四层)模型——传输层(UDP协议、TCP协议)

阅读量:

传输层

传输层是TCP/IP五层(四层)模型的第二层,主要负责数据能够从发送端传输接收端

1 端口号
  • 端口号是一个2字节16为的整数
  • 端口号用来标识一个进程,告诉操作系统,当前的这个数据要交给哪一个进程来处理
  • IP地址 + 端口号能够标识网络上的某一台主机的某一个进程(即套接字)
  • 一个端口号只能被一个进程占用,而一个进程可以占用多个端口号

pid和端口号的区别:
pid和端口号都可以表示一个进程,但是区别在于每一个进程都有pid,但不是每个进程都有端口号(通俗来讲,只有上网的pid才有端口号)

1.1 端口号划分
端口号 名称 含义
0——1023 知名端口号 HTTP,FTP,SSH等这些广为使用的应用层协议,他们的端口号是固定的
1024——49151 注册端口号 这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义
49152——65535 私有端口号 理论上,不应为服务分配这些端口
1.2 常见知名端口号

查看所有知名端口号命令

复制代码
    cat /etc/services
端口号 服务进程
21 FTP服务器
2000 FTP客户端
22 SSH服务器
23 TELNET
25 SMTP服务器
80 HTTP服务器
2001 FTTP客户端
443 HTTPS

一个进程可以绑定多个端口号吗??一个端口号可以被多个线程绑定吗??
一个进程可以绑定多个端口,一个端口是不能被多个进程绑定的,
因为端口号+IP=套接字,IP表示目标电脑的地址,端口表示目标电脑操作系统上的进程。所以套接字可以唯一标识一个进程,如果一个端口被多个程序绑定,那么就不知道数据该发送给谁。所以,一个端口是不能被多个进程绑定的。但是,一个进程可以绑定多个端口,不同的端口连接不同的服务器程序,已提供不同的服务。

2 UDP协议
2.1 UDP报文格式
这里写图片描述
  • UDP报文长度位8字节
  • 16位源端口号决定有效载荷如何交付
  • 16位UDP长度表示整个数据报(UDP部首+UDP数据)的最大长度
  • 如果校验和出错,那么整个报文直接丢弃
  • UDP协议首部中有一个16位的最大长度. 所以一个UDP能传输的数据最大长度是2^16 = 64K(包含UDP首部),但是64K很小,如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装
2.2 UDP的特点

1 无连接
知道对端的IP和端口号就直接进行传输,不需要建立连接
2 不可靠
没有确认机制,没有重传机制,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息
3 面向数据报
不能灵活的控制读写数据的次数和数量,即应用层交给UDP多长的报文,UDP原样发送,既不拆分也不合并

2.3 UDP缓冲区
  • UDP没有UDP没有真正意义上的发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后序的传输动作
  • UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;

全双工 :UDP的socke既能读又能写,且能同时进行,叫做全双工
半双工 :不能同时进行的叫做半双工

2.4 基于UDP的应用层协议

NFS:网络文件系统
TFTP:简单文件传输协议
DHCP:动态主机配置协议 (是路由器的功能,集成在路由器中,自动获取IP,向路由器申请获得)
BOOTP:启动协议(无盘启动)
DNS:域名解析协议

3 TCP协议——传输控制协议
3.1 说到TCP首先要想到TCP的报文格式,TCP的可靠性和TCP的效率和TCP的粘包问题,这些在我的博客TCP协议中都有讲解
3.2 基于TCP的应用层协议

HTTP:超文本传输协议
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版
SSH:是建立在应用层和传输层基础上的安全协议
Telnet:是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式
FTP:文件传输协议
SMTP:简单邮件传输协议

4 TCP与UDP协议的对比
  • TCP用于可靠传输的情况,应用于文件传输,重要状态更新等场景
  • UDP用于对高速传输和实时性要求较高的通信领域(早期QQ,视频传输等),UDP还可以用于广播

全部评论 (0)

还没有任何评论哟~