传输层--UDP和TCP详解

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

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

端口号(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协议
UDP特点:无连接、不可靠、面向数据报

在这里插入图片描述

16位的源端口号表示数据从哪里来;16位的目的端口号表明数据要到哪里去;16位UDP长度包含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程序时自定义的应用层协议。

TCP协议(传输控制协议–面向连接):作用是对数据的传输进行一个详细的控制
TCP特点:可靠性、性能、策略(流量控制、拥塞避免、滑动窗口)
TCP本质是面向字节流。

第一件事是建立连接。

TCP协议强调对等,通信双方角色地位平等。客户端请求服务器时,要保证客户端与服务器均受到。

TCP协议跟UDP相比是要保证可靠性(故TCP报头要比UDP报头复杂)。

在这里插入图片描述

源/目的端口号:表示数据是从哪个进程来,到哪个进程去;

4位首部长度:
1.如何将报头与有效载荷区分?

4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最大长度是15*4=60**(默认情况下,TCP报头标准长度是4×5(从上到下五行)=20字节)**

4位首部长度基本单位是按4字节算的,若按一字节计算最大为1111=15,故TCP首部长度是15*4=60字节。

故我们要计算报头长度只需要将TCP首部长度除以TCP首部长度基本单位即可。例如通常情况下TCP包头标准长度为20字节,故此时报头长度为20/4=5,但又因为首部长度基本单位是4,故此处填写5的二进制0101。

2.如何将有效载荷发送给上层某个协议?

根据16位的目的端口号。

32位序号/32位确认序号:
可靠性:(保证双向均可靠(双向报文均需确认) 32位序号/32位确认序号)

**确认应答机制(ACK机制):**请求方发出请求后,应答方发回应答,此时保证应答方已知晓信息;当请求方向应答方再次发回确认信息后,此时保证请求方已经知晓应答方的应答,但若要保证应答方知晓信息就必须得到应答方回复ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值