
TCP/IP
文章平均质量分 97
何以慰風塵
本愿一心向胡马,奈何胡马奔沟渠
展开
-
TCP/IP实现(一) 系统文件结构及mbuf
一.描述符 在linux下编程时很多函数都会返回一个描述符,比如文件描述符,套接字描述符。那么描述符到底是什么呢?说到底描述符不过是一个数组下标,这个数组是由指向文件对象的指针组成的。文件对象是在文件被打开时创建的(这里的文件不仅仅是磁盘上的文件,也可以是套接字等),具体的关于文件对象的细节会在《linux内核解析——文件系统》相关博文中说明。 现在只要知道:每个进...原创 2018-11-06 21:04:20 · 434 阅读 · 0 评论 -
HTTP 超文本传送协议
一.概述 HTTP协议规定了浏览器如何与万维网服务器进行通信,比如申请文档的格式,提交数据的格式等。而我们所说的HTML(超文本标记语言)是描述如何解释万维网上的页面文档的。HTTP协议中,由客户建立起一条同服务器进程的TCP链接,之后发出请求并读取服务器进程的响应。当服务器将客户请求的资源发回后,便会关闭连接以结束本次响应。上述过程也可以称为短连接。这个过程再HTTP1.1中进行...原创 2018-11-25 13:40:29 · 246 阅读 · 0 评论 -
TCP/IP实现(九) 插口I/O
一.插口缓存(套接字缓存)struct sockbuf { u_long sb_cc; // 缓存中的数据大小 u_long sb_hiwat; /* max actual char count */ u_long sb_mbcnt; // 缓存mbuf的数量 u_long sb_mbmax; /* max chars of mbufs to use */ long sb_low...原创 2018-11-20 16:02:40 · 595 阅读 · 0 评论 -
TCP/IP实现(七) ICMP协议
一.概述 ICMP协议用于在网络间传递请求与应答以及差错消息。比如Ping程序便是应用了请求与应答,而Traceroute应用的却是差错消息来实现的。 对于ICMP的输入往往要经过多次处理,首先由icmp_input函数进行处理,进行首部校验,并根据ICMP类型做进一步处理,对于ICMP类型超过ICMP处理范围的(即大于icmp_type>ICMP_MAXTYP...原创 2018-11-17 17:08:02 · 793 阅读 · 0 评论 -
DNS域名系统
一.DNS概述 域名系统的功能只有一个便是进行域名与IP地址之间的转换。如果我们从DNS产生的历史来说起应该会更便于我们理解DNS系统及所谓的域名。在ARPANET时期,由于网络上主机较少,也为了便于人们记忆,因此为每个主机进行了命名,并将主机名与IP地址的映射写在了一张表中。随着网络的不断扩充,更多机构(如大学,政府部门)的加入,显然使用文件来一一映射是不明智的。因此根据机构组织...原创 2018-11-23 17:01:06 · 176 阅读 · 0 评论 -
TCP/IP实现(八) 插口层
一.概述 插口层可以说是在用户程序与TCP/IP协议之间的一个呈上启下的层次,它将用户与某协议相关的请求映射到具体的协议实现。不同类型的套接字在产生时就会关联到相关协议实现(通过一组函数指针来实现的)。比如在一个TCP套接字上调用write函数,则会转而调用TCP协议相关的函数。二.插口 插口也就是我们常说的套接字,它代表了一条通信链路的一端,插口结构中存储或...原创 2018-11-19 17:03:04 · 301 阅读 · 0 评论 -
TCP/IP实现(十二) TCP 传输控制协议
一.TCP首部 TCP首部结构如下图所示: TCP协议中用序号来标识每一个字节,连接的每一端都维护着自己的序号,起始序号是主机选择的,称为ISN(随时间变化,每个连接都具有不同的ISN)。除每个数据字节消耗序号外,SYN和FIN也会消耗序号。确认序号用于表示发送确认的一端所期望收到的下一个序号,即以成功接收的最后一个字节的序号加1,要注意T...原创 2018-11-22 21:55:15 · 422 阅读 · 0 评论 -
TCP/IP实现(十一) UDP用户数据报协议
一.已连接UDP 我们可以对UDP套接字调用connect进行连接,但与TCP连接的差别很大。UDP进行连接并不进行三次握手,内核只是内核只是检查一些立即可知的错误(如一个显然不可达的目的地),并将对端的IP地址和端口号记录在PCB协议控制块中,之后立即返回到调用进程1.与未连接UDP的区别 a) 不能在给输出操作指定目的IP和端口号,否则将返回错误EISCONN。b)...原创 2018-11-21 18:36:51 · 238 阅读 · 0 评论 -
TCP/IP实现(六) IP选项处理
一.概述 IP选项是IP固定首部之后的选项部分,由于IP首部长度是用4bit来计数,以4个字节为表示的,所以首部长度最多为60个字节,IP选项最多为40个字节。IP选项字段可能包含0~多个单独选项。选项包含两类:单字节与多字节。单字节选项只有1个字节的类型字段,多字节字段包含1个字节的类型字段,1个字节的长度字段,以及之后的数据字段(数据字段的第一个字节一般是数据偏移,如在源路由选...原创 2018-11-16 16:43:25 · 1971 阅读 · 1 评论 -
TCP/IP实现(十) 协议控制块
一.协议控制块概述 网际协议控制块(Internet协议控制块)是传输层的数据结构,它被TCP,UDP以及原始IP使用,但其它协议并不适用(如:IP,ICMP,IGMP),其作用是存储一个UDP,TCP端点的共有信息,如:外部和本地IP,外部及本地端口号(原始IP不使用),IP首部原型,该socket使用的IP选项(因此大部分IP选项只作用于设置的那个socket,而不会影响到其它...原创 2018-11-21 09:32:22 · 1174 阅读 · 0 评论 -
TCP/IP实现(四) IP编址
一.IP地址 一个IP地址是被指派给一个系统中的网络接口的而不是系统本身,就如在《TCP/IP实现(二) 接口层数据结构》中描述的那样,每一个用于存储IP协议地址信息的in_ifaddr结构都和一个描述接口信息的ifnet(或者是他的专用化)相关联。 IPv4地址分为5类: ...原创 2018-11-08 18:49:40 · 1338 阅读 · 0 评论 -
TCP/IP实现 (三) 以太网的数据收发
一.以太网帧结构 以太网帧结构由48位的目的地址和源地址组成,紧接着是一个16位的类型字段(表示该帧所携带的数据类型,如IP分组是0x0800),最后是CRC循环校验,如图所示: 二.以太网的数据接收1接收过程step1:产生中断并调用leintr 以太网接口会接收目的地址(单播地址或广播)为自己的帧...原创 2018-11-07 18:45:25 · 5006 阅读 · 0 评论 -
TCP/IP实现(二) 接口层数据结构
一.存放接口信息的数据结构1.通用信息ifnet 在系统初始化期间,分别为每个网络设备分配一个独立的ifnet结构,该结构中存储了接口的通用信息,包括:接口名if_name(如le,lo等),用于区别同类型接口的接口编号if_unit(如le0,le1),用于BSD分组过滤的if_pcount和if_bpf,接口最大传输单元if_mtu,数据链路地址长度if_addrlen,由硬件...原创 2018-11-07 14:45:44 · 539 阅读 · 0 评论 -
TCP/IP实现(五) IP协议
一.IP首部1.概述 ip数据报的首部格式如下: 首部长度是已4字节为单位的,因此首部最长为15 * 4 = 60个字节。生存时间规定了数据报可以经过的最多路由器数。标识字段ip_id唯一标识主机发送的每一份数据报,通常每发送一份报文其值就加1。2.大端序与小端序 大端序又叫网络...原创 2018-11-10 13:33:13 · 1463 阅读 · 0 评论