做网站怎么兼容所有浏览器,网站集群建设的意义,asp.net怎样做网站登录,从seo角度去建设网站目录
一#xff0c;再谈端口号
1.1 端口号
1.2 netsta命令
二#xff0c;UDP协议
2.1 关于UDP
2.2 Udp协议格式
2.3 Udp协议特点
2.4 Udp的缓冲区 一#xff0c;再谈端口号
http协议本质是“请求 - 响应”形式的协议#xff0c;但是应用层需要先将数据交给传输层再谈端口号
1.1 端口号
1.2 netsta命令
二UDP协议
2.1 关于UDP
2.2 Udp协议格式
2.3 Udp协议特点
2.4 Udp的缓冲区 一再谈端口号
http协议本质是“请求 - 响应”形式的协议但是应用层需要先将数据交给传输层然后由传输层对数据做进一步处理后再将数据继续向下层交付最终贯穿整个网络协议栈最终就发送到了网络当中
传输层负责可靠性传输确保数据能够可靠地传送到目标地址。
1.1 端口号
在TCP/IP协议中用“源IP”“源端口号”“目的IP”“目的端口号”“协议号”这样一个五元组来标识一个通信0 - 1023这些端口号被称为知名端口号HTTP,FTP,SSH等这些广为使用的应用层协议它们的端口号都是固定的ssh服务器是22端口ffp是21telnet是23smtp邮件协议是25mysql数据库是3306这些都是常用的服务器为了方便使用它们都用固定的端口号1024 - 65535是操作系统动态分配的端口号客户端程序的端口号就是由操作系统从这个返回分配的
通过netstat命令可以查看到这样地五元组信息 出了netstat命令我们也可以查看 /etc/services 文件查看网络服务名和它们对应使用地端口号和协议 1.2 netsta命令 netstat命令 这个我们上面已经用过了是查看网络状态地重要命令下面是选项介绍
n拒绝显示别名能显示数字的全部转为数字l仅列出处于LISTEN监听状态的服务p显示建立相关链接的程序名t仅显示协议号为tcp相关的选项u仅显示协议号为udp相关的选项a显示所有选项默认不显示LISTEN相关
我们查看Tcp相关网络信息时一般用nltp查看Udp时一般用nlup 二UDP协议
2.1 关于UDP
我们前面用的各种sock API都是系统提供的我们可以通过这些接口搭建上层应用比如http就是基于Tcp的因为http就是再Tcp套接字基础上搭建的
应用层往下就是传输层也是属于操作系统的所以也由操作系统管理所以Udp是存在与内核中的是操作系统的网络协议栈自带的所以也就是说Udp所有的功能由操作系统完成
2.2 Udp协议格式
下面是Udp协议报头的图形化 16位源端口号表示数据从哪里来16位目的端口号表示数据要去哪里16位UDP长度表示整个数据报的长度UDP首部 UDP数据16位UDP校验和如果UDP报文的检验出错就会直接将报文丢弃
我们之前就说过学习任何协议都要回答下面两个问题 问题UDP如何将报头和有效载荷分离 解答UDP采用的是定长报头报头是操作系统加的所以分离报头时就会简单很多 问题UDP协议如何将有效载荷交付给上层哪一个协议 解答 应用层每一个网络进程都会绑定一个端口服务器是绑定固定报头客户端是绑定随机报头所以UDP就是通过报头当中的“16为目的端口号”来找到对应的进程的该操作是通过哈希的映射完成的 操作系统是C语言为底层语言所以UDP协议也一定是用C语言写的UDP报头实际就是一个位段类型例如 struct udp_struct
{uint32_t src_port:16;uint32_t dst_poet:16;uint32_t length:16;uint32_t check_code:16;
};这个东西我们在语言上叫做“位段”在协议上叫做“UDP报头”是自定义类型是类型可以定义变量也可以new开辟空间struct udp_header h; h.src_port1234; h.dst8888等等 然后操作系统里就存在着大量的UDP报文先描述再组织所以操作系统内是有着很多描述报文的结构体的这个结构体叫做 sk_buff所以操作系统在封装报文时先定义一个缓冲区然后把udp_struct里的东西拷贝进来 然后再把用户要发送的数据拷贝进来然后sk_buff里面的start指向缓冲区开头end指向缓冲区结尾然后我们对还没来得及发的UDP报文用sk_buff描述起来然后把很多个sk_buff结构体用链表组织起来 当接收缓冲区满了就丢弃UDP也就是干掉对应的sk_buff然后释放掉udp_struct 把报文往上下层交付也就是把结构体叫做IP层对应的一套方法然后对缓冲区的数据再做封装
关于位段可以看咱远古时期的一篇文章C语言进阶——自定义类型_c语言自义类型-CSDN博客
2.3 Udp协议特点
无连接知道目的IP和端口就行直接进行传送不需要建立连接不可靠没有确认机制也没有重传机制如果因为网络问题导致数据没有完整发给对方也不会有任何报错面向数据报不够灵活的控制读写数据的次数和数量 面向数据报应用层交给UDP多长的报文UDP原样发送不做任何的拆分和合并 比如用UDP传输100字节的数据 发送端调用sendto发100个字节那么接受端必须调用recvfrom一次接收100个而不能调用10此recvfrom一次接收10个 2.4 Udp的缓冲区
UDP没有真正意义上的发送缓冲区调用sendto会直接交给内核然后再由内核将数据贯穿协议栈进行后续的传输动作UDP具有接收缓冲区但是一旦缓冲区满了后续到达的UDP数据会直接丢弃UDP的socket能读能写所以UDP是全双工的