传输层基础及UDP协议

传输层基础及UDP协议详解

传输层:负责数据能够从发送端传输接收端。

端口号:用来标识特定服务的(某种意义上特定服务与端口号可互相甄别)

端口号(Port)标识了一个主机上进行通信的不同的应用程序;

在这里插入图片描述

1.端口号与应用层绑定,但与传输层也有一定的关系;

2.通常情况下一个端口号不能被多个服务器共同使用,但在多线程情况下可以。一个进程可以绑定多个端口号。

TCP协议(点对点传输:只知道起点和终点,不考虑中间过程,实现此过程需直到源IP地址源端口及目的IP目的端口)

在TCP/IP协议duan’kou’ho中,用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”这样的五元组来标识;

端口号划分(端口号范围0-65535)

0-1023:均为知名端口号:若自行想绑定这个范围内的端口号需要管理员权限;

1024-65535:用户可随意使用,操作系统动态分配的端口号,客户端程序的端口号。(端口号是用两个字节的变量来保存)(65535为两个字节的最大值)

ssh服务器:使用22端口

ftp服务器:21端口号

telent服务器:23端口

http服务器:80端口

https服务器:443端口

执行下面命令,可看到知名端口号,我们自行写的程序需要使用端口时,要避开这些知名端口号。

cat /etc/services

怎么查看网络链接?(面试)–netstat(用来查看网络状态的重要工具)

语法:netstat[选项]

功能:查看网络状态

常用选项:

1.n拒绝显示别名,能显示数字的全部转化为数字

2.l仅列出有在Listen(监听)的服务状态

3.p显示建立相关链接的程序名

4.t(tcp)仅显示tcp相关选项

5.u(udp)仅显示udp相关选项

6.a(all)显示所有选项,默认不显示LISTEN相关

查看本机IP地址命令行为:ifconfig

查看UDP和TCP命令行:netstat -u(UDP) netstat -t(TCP) netstat -au(所有UDP) netstat -at(所有TDP)

​ netstat -aut(所有UDP和TDP的信息(源IP端口号和目的IP端口号)以名称形式显示)

​ netstat -autn(将所有UDP和TDP的信息(源IP端口号和目的IP端口号)以数字形式显示)

pidof:查看服务器进程ID

语法:pidof[进程名]

功能:通过进程名,查看进程ID

UDP协议

在这里插入图片描述

16位的源端口号表示数据从哪里来;16位的目的端口号表明数据要到哪里去;16位EDP长度包含8字节的报头及相减剩余的均为有效载荷;16位UDP检验和是指对数据信息进行检验,上层接收到的信息可以不完整(因UDP定长故传输信息过长时会导致信息丢失)但是不能错。

1.UDP如何将报头与有效载荷分离?

因UDP报头长度固定为8个字节,接收到UDP报文时只需要将前8个字节去掉,剩余的就为有效载荷,因UDP长度为16位,故有效载荷长度也知道。

2.UDP报文如何知道将有效载荷要交给上层哪个具体协议呢?

此时我们可根据16位的目的端口号(端口号与应用层绑定,绑定目的是让UDP与TCP通过一定的方式将数据交给上层某个具体协议,目的端口号用来表明数据如何交付的问题)知道。

标长8字节和16位UDP长度两个字段合起来表明报头和有效载荷分离的问题。

如何将报头与有效载荷分离的两种方法:

1.HTTP使用空行分离报头与有效载荷;

2.UDP定长报头。

UDP特点

1.无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接;

2.不可靠:没有确认机制,没有重传机制,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;(不可靠缺点为可能会丢包,但优点为简单快速(因若想保证可靠性就需要在报头内规定更复杂的协议,这样的话就会比正常的报头更复杂))

3.面向数据报:不能灵活地控制读写数据的次数和数量(即怎么传输就怎么接受)。

UDP缓冲区

1.UDP没有发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;

2.UDP具有接收缓冲区,但是这个缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃。

UDP的socket既能同时读也能同时写,这个概念叫做全双工。

全双工:双方可直接同时通信。

UDP使用注意事项

UDP协议首部中有一个16位的最大长度,也就是说UDP能传输的数据最大长度时64K(2^16)(包含UDP首部)然而64K在当今的互联网环境下,是一个非常小的数字(但因UDP长度定长无法增大),如果我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

基于UDP的应用层协议

1.NFS:网络文件系统

2.TFTP:简单文件传输协议

3.DHCP:动态主机配置协议(采用UDP协议)

4.BOOTP:启动协议(用于无盘设备启动)

5.DNS:域名解析协议(采用UDP协议)

当然也包括自己写UDP程序时自定义的应用层协议。

猜你喜欢

转载自blog.csdn.net/weixin_42617262/article/details/88751645
今日推荐