淘宝内部优惠券网站怎么建设,wordpress 页面标签页,京东网络营销方式分析,wordpress媒体页目录
传输层
再谈端口号
端口号范围划分
认识知名端口号
两个问题
netstat与iostat
pidof
UDP协议
UDP协议格式
UDP协议的特点
面向数据报
UDP的缓冲区
UDP使用注意事项
基于UDP的应用层协议 传输层
在学习HTTP等应用层协议时#xff0c;为了便于理解#xff…目录
传输层
再谈端口号
端口号范围划分
认识知名端口号
两个问题
netstat与iostat
pidof
UDP协议
UDP协议格式
UDP协议的特点
面向数据报
UDP的缓冲区
UDP使用注意事项
基于UDP的应用层协议 传输层
在学习HTTP等应用层协议时为了便于理解可以简单的认为HTTP协议是将请求和响应直接发送到了网络当中。但实际应用层需要先将数据交给传输层由传输层对数据做进一步处理后再将数据继续向下进行交付该过程贯穿整个网络协议栈最终才能将数据发送到网络当中。
传输层负责可靠性传输确保数据能够可靠地传送到目标地址。为了方便理解在学习传输层协议时也可以简单的认为传输层协议是将数据直接发送到了网络当中。
再谈端口号 端口号的作用 端口号Port标识一个主机上进行网络通信的不同的应用程序。当主机从网络中获取到数据后需要自底向上进行数据的交付而这个数据最终应该交给上层的哪个应用处理程序就是由该数据当中的目的端口号来决定的。
从网络中获取的数据在进行向上交付时在传输层就会提取出该数据对应的目的端口号进而确定该数据应该交付给当前主机上的哪一个服务进程。 因此端口号是属于传输层的概念的在传输层协议的报头当中就会包含与端口相关的字段。 五元组标识一个通信 在TCP/IP协议中用“源IP地址”“源端口号”“目的IP地址”“目的端口号”“协议号”这样一个五元组来标识一个通信。
比如有多台客户端主机同时访问服务器这些客户端主机上可能有一个客户端进程也可能有多个客户端进程它们都在访问同一台服务器。 而这台服务器就是通过“源IP地址”“源端口号”“目的IP地址”“目的端口号”“协议号”来识别一个通信的。
先提取出数据当中的目的IP地址和目的端口号确定该数据是发送给当前服务进程的。然后提取出数据当中的协议号为该数据提供对应类型的服务。最后提取出数据当中的源IP地址和源端口号将其作为响应数据的目的IP地址和目的端口号将响应结果发送给对应的客户端进程。 通过netstat命令可以查看到这样的五元组信息。 其中的Local Address表示的就是源IP地址和源端口号Foreign Address表示的就是目的IP地址和目的端口号而Proto表示的就是协议类型。 协议号 VS 端口号 协议号是存在于IP报头当中的其长度是8位。协议号指明了数据报所携带的数据是使用的何种协议以便让目的主机的IP层知道应该将该数据交付给传输层的哪个协议进行处理。端口号是存在于UDP和TCP报头当中的其长度是16位。端口号的作用是唯一标识一台主机上的某个进程。端口号是存在于UDP和TCP报头当中的其长度是16位。端口号的作用是唯一标识一台主机上的某个进程。
端口号范围划分
端口号的长度是16位因此端口号的范围是0 ~ 65535
0 ~ 1023知名端口号。比如HTTPFTPSSH等这些广为使用的应用层协议它们的端口号都是固定的。1024 ~ 65535操作系统动态分配的端口号。客户端程序的端口号就是由操作系统从这个范围分配的。
认识知名端口号 常见的知名端口号 有些服务器是非常常用的这些服务器的端口号一般都是固定的
ssh服务器使用22端口。ftp服务器使用21端口。telnet服务器使用23端口。http服务器使用80端口。https服务器使用443端口。 查看知名端口号 我们可以查看/etc/services文件该文件是记录网络服务名和它们对应使用的端口号及协议。 说明一下 文件中的每一行对应一种服务它由4个字段组成每个字段之间用TAB或空格分隔分别表示“服务名称”、“使用端口”、“协议名称”以及“别名”。
我们自己写一个程序使用端口号时, 要避开这些知名端口号
两个问题 一个端口号是否可以被多个进程绑定 一个端口号绝对不能被多个进程绑定因为端口号的作用就是唯一标识一个进程如果绑定一个已经被绑定的端口号就会出现绑定失败的问题。 一个进程是否可以绑定多个端口号 一个进程是可以绑定多个端口号的这与“端口号必须唯一标识一个进程”是不冲突的只不过现在这多个端口唯一标识的是同一个进程罢了。
我们限制的是从端口号到进程的唯一性而没有要求从进程到端口号也必须满足唯一性因此一个进程是可以绑定多个端口号的。
netstat与iostat netstat命令 netstat是一个用来查看网络状态的重要工具。
其常见的选项如下
n拒绝显示别名能显示数字的全部转换成数字。l仅列出处于LISTEN监听状态的服务。p显示建立相关链接的程序名。t(tcp)仅显示tcp相关的选项。u(udp)仅显示udp相关的选项。a(all)显示所有的选项默认不显示LISTEN相关。
查看TCP相关的网络信息时一般选择使用nltp组合选项。 而查看UDP相关的网络信息时一般选择使用nlup组合选项。 如果想查看LISTEN状态以外的连接信息可以去掉l选项此时就会将处于其他状态的连接信息显示出来。 iostat命令 iostat主要用于输出磁盘IO和CPU的统计信息。
其常见的选项如下
c显示CPU的使用情况。d显示磁盘的使用情况。N显示磁盘列阵LVM信息。n显示NFS使用情况。k以KB为单位显示。m以M为单位显示。t报告每秒向终端读取和写入的字符数和CPU的信息。V显示版本信息。x显示详细信息。p显示磁盘分区的情况。
比如我们要查看磁盘IO和CPU的详细信息。 CPU属性值说明
%userCPU处在用户模式下的时间百分比。%niceCPU处在带NICE值的用户模式下的时间百分比。%systemCPU处在系统模式下的时间百分比。%iowaitCPU等待输入输出完成时间的百分比。%steal管理程序维护另一个虚拟处理器时虚拟CPU的无意识等待时间百分比。%idleCPU空闲时间百分比。
pidof
pidof命令可以通过进程名查看进程id。
例如我们用pidof命令查看我们自己编写的一个死循环进程。 pidof命令可以配合kill命令快速杀死一个进程。 UDP协议
UDP协议格式 UDP的位置 网络套接字编程时用到的各种接口是位于应用层和传输层之间的一层系统调用接口这些接口是系统提供的我们可以通过这些接口搭建上层应用比如HTTP。我们经常说HTTP是基于TCP的实际就是因为HTTP在TCP套接字编程上搭建的。
而socket接口往下的传输层实际就是由操作系统管理的因此UDP是属于内核当中的是操作系统本身协议栈自带的其代码不是由上层用户编写的UDP的所有功能都是由操作系统完成因此网络也是操作系统的一部分。 UDP协议格式 UDP协议格式如下 16位源端口号表示数据从哪里来。16位目的端口号表示数据要到哪里去。16位UDP长度表示整个数据报UDP首部UDP数据的长度。16位UDP检验和如果UDP报文的检验和出错就会直接将报文丢弃。
我们在应用层看到的端口号大部分都是16位的其根本原因就是因为传输层协议当中的端口号就是16位的。 UDP如何将报头与有效载荷进行分离 UDP的报头当中只包含四个字段每个字段的长度都是16位总共8字节。因此UDP采用的实际上是一种定长报头UDP在读取报文时读取完前8个字节后剩下的就都是有效载荷了。 UDP如何决定将有效载荷交付给上层的哪一个协议 UDP上层也有很多应用层协议因此UDP必须想办法将有效载荷交给对应的上层协议也就是交给应用层对应的进程。
应用层的每一个网络进程都会绑定一个端口号服务端进程必须显示绑定一个端口号客户端进程则是由系统动态绑定的一个端口号。UDP就是通过报头当中的目的端口号来找到对应的应用层进程的。
说明一下 内核中用哈希的方式维护了端口号与进程ID之间的映射关系因此传输层可以通过端口号得到对应的进程ID进而找到对应的应用层进程。 如何理解报头 操作系统是C语言写的而UDP协议又是属于内核协议栈的因此UDP协议也一定是用C语言编写的UDP报头实际就是一个位段类型。 UDP数据封装
当应用层将数据交给传输层后在传输层就会创建一个UDP报头类型的变量然后填充报头当中的各个字段此时就得到了一个UDP报头。此时操作系统再在内核当中开辟一块空间将UDP报头和有效载荷拷贝到一起此时就形成了UDP报文。
UDP数据分用
当传输层从下层获取到一个报文后就会读取该报文的前8个字节提取出对应的目的端口号。当传输层从下层获取到一个报文后就会读取该报文的钱8个字节提取出对应的目的端口号。
UDP协议的特点
UDP传输的过程就类似于寄信其特点如下
无连接知道对端的IP和端口号就直接进行数据传输不需要建立连接。不可靠没有确认机制没有重传机制如果因为网络故障该段无法发到对方UDP协议层也不会给应用层返回任何错误信息。面向数据报不能够灵活的控制读写数据的次数和数量。
注意 报文在网络中进行路由转发时并不是每一个报文选择的路由路径都是一样的因此报文发送的顺序和接收的顺序可能是不同的。
面向数据报
应用层交给UDP多长的报文UDP就原样发送既不会拆分也不会合并这就叫做面向数据报。
比如用UDP传输100个字节的数据
如果发送端调用一次sendto发送100字节那么接收端也必须调用对应的一次recvfrom接收100个字节而不能循环调用10次recvfrom每次接收10个字节。
UDP的缓冲区
UDP没有真正意义上的发送缓冲区。调用sendto会直接交给内核由内核将数据传给网络层协议进行后续的传输动作。UDP具有接收缓冲区。但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致如果缓冲区满了再到达的UDP数据就会被丢弃。UDP的socket既能读也能写因此UDP是全双工的。 为什么UDP要有接收缓冲区 如果UDP没有接收缓冲区那么就要求上层及时将UDP获取到的报文读取上去如果一个报文在UDP没有被读取那么此时UDP从底层获取上来的报文数据就会被迫丢弃。
一个报文从一台主机传输到另一台主机在传输过程中会消耗主机资源和网络资源。如果UDP收到一个报文后仅仅因为上次收到的报文没有被上层读取而被迫丢弃一个可能并没有错误的报文这就是在浪费主机资源和网络资源。
因此UDP本身是会维护一个接收缓冲区的当有新的UDP报文到来时就会把这个报文放到接收缓冲区当中此时上层在读数据的时就直接从这个接收缓冲区当中进行读取就行了而如果UDP接收缓冲区当中没有数据那上层在读取时就会被阻塞。因此UDP的接收缓冲区的作用就是将接收到的报文暂时的保存起来供上层读取。
UDP使用注意事项
需要注意的是UDP协议报头当中的UDP最大长度是16位的因此一个UDP报文的最大长度是64K包含UDP报头的大小。
然而64K在当今的互联网环境下是一个非常小的数字。如果需要传输的数据超过64K就需要在应用层进行手动分包多次发送并在接收端进行手动拼装。
基于UDP的应用层协议
NFS网络文件系统。TFTP简单文件传输协议。DHCP动态主机配置协议。BOOTP启动协议用于无盘设备启动。DNS域名解析协议。
当然也包括你自己写UDP程序时自定义的应用层协议。 参考文献
http://t.csdn.cn/3GdFm