![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
TCP/IP详解
文章平均质量分 65
Evan_ZGYF丶
我在起点
展开
-
【TCP/IP协议】各层报文首部数据格式汇总
这篇文档的目的是将自己之前总结的各层报文的协议头进行一个汇总,方便自己查阅。数据链路层【TCP/IP详解】以太网帧格式【TCP/IP详解】ARP报文格式【TCP/IP详解】RARP报文格式【TCP/IP协议】PPP协议的帧格式IP层【TCP/IP详解】IP报文格式【TCP/IP详解】ICMP报文格式传输层【TCP/IP详解】TCP报文格式【TCP/IP详解】UDP报文格式应用层...原创 2021-01-03 18:54:44 · 1773 阅读 · 1 评论 -
【TCP/IP协议】TCP/IP笔试面试题整理
参考: TCP协议灵魂12问目录能不能说一说 TCP 和 UDP 的区别?请简述TCP_SYN泛洪攻击的原理,并阐述如何应对SYN泛洪?能不能说一说 TCP 和 UDP 的区别?首先概括一下基本的区别:TCP是一个面向连接的、可靠的、基于字节流的传输层协议。而UDP是一个面向无连接的传输层协议。(就这么简单,其它TCP的特性也就没有了)。具体来分析,和UDP相比,TCP有三大核心特性:面向连接。所谓的连接,指的是客户端和服务器的连接,在双方互相通信...转载 2021-01-02 14:45:07 · 1942 阅读 · 1 评论 -
【TCP/IP详解】TCP三次握手,四次挥手(连接及释放过程)
原:《TCP三次握手详解及释放连接过程》转载自:http://blog.csdn.net/oney139/article/details/8103223TCP头部: 其中 ACK SYN 序号 这三个部分在以下会用到,它们的介绍也在下面。暂时需要的信息有:ACK: TCP协议规定,只有ACK=1时原创 2016-09-09 14:32:49 · 1658 阅读 · 1 评论 -
【TCP/IP协议】PPP协议的帧格式
解析:开始/结束标志(F,1字节):PPP采用7EH作为一帧的开始和结束标志,固定值(0x7E); 地址域(A,1字节):固定值(0xFF);控制域(C,1字节):固定值(0x03);协议域(2字节):IP分组(0x0021),网络控制数据(0x8021),链路控制数据(0xC021);信息域(不超过1500字节):实际传输的信息;校验域(FCS,2字节):用于对信息域的校验;若信息域中出现7EH,则转换为(7DH,5EH)两个字符。当信息域出现7DH时,则转换为(7DH,5DH)。当信息流..原创 2020-12-31 13:40:35 · 3701 阅读 · 0 评论 -
【LWIP】LWIP协议|相关知识汇总|LWIP学习笔记
这里作为一个汇总帖把,把以前写过的LWIP相关的博客文章汇总到一起,方便自己这边查找一些资料。LWIP协议【LWIP】LWIP网络通信流程【LWIP】LWIP动态内存管理【LWIP】原始套接字(SOCK_RAW)【LWIP】AF_PACKET套接字分析【LWIP】AF_UNIX socket套接字分析LWIP源码解析【LWIP】pbuf数据包管理【LWIP】netdev_pbuf_alloc函数分析【LWIP】以太网网卡接口部分初始化【LWIP】netif网络接口结构【LWIP】原创 2020-12-27 19:26:05 · 2641 阅读 · 1 评论 -
【LWIP】netdev_pbuf_alloc函数分析
1.netdev_pbuf_alloc函数简介netdev_pbuf_alloc是网卡驱动中的内存申请函数,申请一块缓冲区用于存放网络报文数据。2.pbuf结构分析netdev_pbuf_alloc函数以pbuf结构申请内存空间,如程序清单 2.1所示。程序清单 2.1 pbuf结构 struct pbuf { struct pbuf *next;原创 2018-01-19 10:59:16 · 1337 阅读 · 1 评论 -
【LWIP】AF_UNIX socket套接字分析
UNIX 域套接字是一种高级的 IPC 机制,这种形式的 IPC 可以在同一计算机系统上运行的两个进程之间进行通信。虽然因特网域套接字可用于同一目的,但 UNIX 域套接字的效率更高。 UNIX 域套接字仅仅复制数据,并不执行协议处理,因此,无需添加或者删除网络报头,无需计算校验和,无需产生序列号,无需发送确认报文等。SylixOS 中的 UNIX 域套接字提供流( SOCK_STREAM)、数据报原创 2017-09-04 14:46:39 · 1107 阅读 · 1 评论 -
【LWIP】RAW原始套接字
通常情况下程序员接所接触到的套接字(Socket)为两类: (1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的TCP 服务应用; (2)数据报式套接字(SOCK_DGRAM):一种无连接的 Socket,对应于无连接的 UDP 服务应用。 从用户的角度来看,SOCK_STREAM、SOCK_DGRAM 这两类套接字似乎的确涵盖了转载 2017-08-15 13:56:17 · 701 阅读 · 0 评论 -
【LWIP】AF_PACKET套接字分析
之前我们学习了原始套接字(SOCK_RAW),通过原始套接字可以越过传输层,直接在IP层进行数据的发送和接收。 通过原始套接字,可以构建自定义的IP包。其实,还有一种套接字比它更厉害,可以构建自定义以太网包–AF_PACKET套接字在SylixOS中, 使用socket(AF_PACKET, SOCK_RAW, ETHTYPE_*)创建的套接字可以接收链路层报文。 那为什么AF_PACKET协原创 2017-08-31 20:25:15 · 5300 阅读 · 2 评论 -
【LWIP】以太网网卡接口部分初始化
在《SylixOS_LWIP协议栈学习:网络接口结构》中,提到过netif 结构体和netdev结构体。 其中netdev结构体是对netif 结构体的一层封装。它们都是用来描述一个以太网网卡接口的。 我们举个例子来看一个以太网网卡接口结构是怎样被初始化,还有数据包是如何接收和发送的。 static struct netdev_f原创 2017-04-11 15:54:24 · 3573 阅读 · 1 评论 -
【LWIP】原始套接字(SOCK_RAW)
通常情况下我们接触到的套接字为两类: (1)字节流套接字(SOCK_STREAM):面向连接的socket套接字,用于TCP服务应用。 (2)数据包套接字(SOCK_DGRAM):无连接、不可靠的socket套接字,用于UDP服务应用。从用户的角度来看,SOCK_STREAM、SOCK_DGRAM 这两类套接字似乎的确涵盖了 TCP/IP 应用的全部,因为基于 TCP/IP 的应用,从协议栈的层次上讲,在传输层的确只可能建立于 TCP 或 UDP 协议之上,而 SOCK_STREAM、SOCK_D原创 2017-08-31 14:49:23 · 5011 阅读 · 5 评论 -
【LWIP】LWIP网络通信流程汇总
LWIP网络通信基本流程如下: 应用层和传输层之间如何通信。 应用层和协议栈(传输层、网络层、数据链路层)之间的通信属于进程间通信,在LWIP中,抽象出了socket的概念,即应用程序通过socket与协议栈进行通信,如下: 1.应用程序与TCP通信:socket(AF_INET, SOCK_STREAM, 0)); 2.应用程序与UDP通信:socket原创 2017-08-31 11:28:52 · 4467 阅读 · 2 评论 -
【LWIP】tcpip_input函数解析(协议栈入口)
索引:(*input)() ->tcpip_input() -> ethernet_input()-> ip_input()调用流程:当网卡收到数据后,调用数据帧接收函数进行数据帧的接收,最后通过(*input)()函数传至协议栈(实际是netif->input,有一层封装)。在添加网络接口时将netif->input()指向tcpip_input函数,即:网络协议栈入原创 2017-08-26 15:15:07 · 5851 阅读 · 9 评论 -
【LWIP】LWIP通信邮箱
索引:LWIP通信邮箱netconn结构体一般情况下,在使用 LWIP 的嵌入式系统中都会有操作系统的支持,而在操作系统中信号量和邮箱往往是最基本的进程通信机制了。将lwip移植到不同的平台主要包括两个部分工作:....MAC+PHY层移植,包括初始化、数据的收发;....应用层框架移植,如操作系统层的线程创建、定时器、消息邮箱;Sy原创 2017-08-28 14:14:42 · 3385 阅读 · 2 评论 -
【LWIP】connect函数分析
索引:一个基本的socket建立顺序是Server端:socket(),bind(), listen(), accept(), recv(),recvfrom(),recvmsg()Client端:socket(),connect(), send(),sendto(),sendmsg()基础知识:LWIP通信邮箱,netconn结构体流程图:原创 2017-08-29 17:27:16 · 4820 阅读 · 1 评论 -
【LWIP】recv,recvfrom,recvmsg函数分析
索引:一个基本的socket建立顺序是Server端:socket(),bind(), listen(), accept(),recv(),recvfrom(),recvmsg()Client端:socket(), connect(), send(),sendto(),sendmsg()基础知识:LWIP通信邮箱,netconn结构体流程图:原创 2017-08-29 17:27:06 · 4251 阅读 · 1 评论 -
【LWIP】accept函数分析
索引:一个基本的socket建立顺序是Server端:socket(),bind(), listen(),accept(), recv(),recvfrom(),recvmsg()Client端:socket(), connect(), send(),sendto(),sendmsg()基础知识:LWIP通信邮箱,netconn结构体流程图:原创 2017-08-29 17:27:00 · 2524 阅读 · 2 评论 -
【LWIP】listen函数分析
索引:一个基本的socket建立顺序是Server端:socket(),bind(),listen(), accept(), recv(),recvfrom(),recvmsg()Client端:socket(), connect(), send(),sendto(),sendmsg()基础知识:LWIP通信邮箱,netconn结构体流程图:原创 2017-08-29 17:28:09 · 1518 阅读 · 1 评论 -
【LWIP】bind函数分析
索引:一个基本的socket建立顺序是Server端:socket(),bind(), listen(), accept(), recv()Client端:socket(), connect(), send()基础知识:LWIP通信邮箱,netconn结构体流程图:原创 2017-08-29 10:40:10 · 1617 阅读 · 1 评论 -
【LWIP】socket函数分析
索引:一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()本文着重介绍Server端的socket()过程。用户使用socket时,首先会调用socket()函数创建一个socket。在lwip中实际调用的就是lwip_s原创 2017-08-28 20:36:14 · 4455 阅读 · 0 评论 -
【LWIP】tcp_input()函数分析
调用流程: 数据包首先调用ethernet_input()函数到达数据链路层,去掉以太网头部; 根据以太网头部类型判断:如果是ARP报文传给调用arp_input()交给ARP协议处理,如果是IP报文就调用ip_input()进入IP层处理; ip_input()函数中比较数据报文的目的IP地址,如果与某个网络接口的IP地址相同,则接收这个报文,依照IP头部的协议字段原创 2017-07-06 19:41:52 · 4922 阅读 · 2 评论 -
【LWIP】tcp_receive函数分析
1.调用流程: tcp_input接收IP层递交上来的数据包,获取TCP首部长度(包括选项部分),将p指针移向pbuf的有效数据部分, 根据TCP报头,遍历tcp_active_pcbs链表,tcp_tw_pcbs链表,tcp_listen_pcbs链表,查找相应TCP控制块, 若在tcp_active_pcbs链表中匹配,调用tcp_process()。原创 2017-07-15 21:11:47 · 6040 阅读 · 4 评论 -
【LWIP】udp_input函数分析
调用流程: 数据包首先调用ethernet_input()函数到达数据链路层,去掉以太网头部; 根据以太网头部类型判断:如果是ARP报文传给调用arp_input()交给ARP协议处理,如果是IP报文就调用ip_input()进入IP层处理; ip_input()函数中比较数据报文的目的IP地址,如果与某个网络接口的IP地址相同,则接收这个报文,依照IP头部的协议字段原创 2017-07-05 11:51:28 · 2589 阅读 · 2 评论 -
【LWIP】Ip4_input函数分析
注意:1.LwIP 仅实现了 IP 层大部分的基本功能,能够发送、接收以及转发信息包,但是不能接 收和发送 IP 分片包,也不能处理携带 IP 参数选项的信息包。不过对大多数的应用来说,这 不会引起任何问题。原创 2017-08-03 10:16:41 · 1873 阅读 · 2 评论 -
【LWIP】tcp_timewait_input函数解析
1.调用流程: tcp_input接收IP层递交上来的数据包,获取TCP首部长度(包括选项部分),将p指针移向pbuf的有效数据部分, 根据TCP报头,遍历tcp_active_pcbs链表,tcp_tw_pcbs链表,tcp_listen_pcbs链表,查找相应TCP控制块, 若在tcp_tw_pcbs链表中匹配,调用tcp_timewait_input()。原创 2017-07-10 22:33:11 · 857 阅读 · 1 评论 -
【LWIP】pbuf_realloc函数分析
调用流程:ip4_input函数接收到数据包后,获取IP报头并分析,若获取的IP报文长度小于pbuf总长度,调用pbuf_realloc函数缩减一个pbuf链到希望的长度。函数简析:缩减一个pbuf链到希望的长度。根据所期望的长度,链中的前几个pbufs可能跳过并保持不变,链中的最后一个pbuf将调整大小,剩余的pbufs将被释放。具体分析: (在源原创 2017-08-17 10:16:51 · 1340 阅读 · 2 评论 -
【LWIP】tcp_listen_input函数分析
1.调用流程: tcp_input接收IP层递交上来的数据包,获取TCP首部长度(包括选项部分),将p指针移向pbuf的有效数据部分, 根据TCP报头,遍历tcp_active_pcbs链表,tcp_tw_pcbs链表,tcp_listen_pcbs链表,查找相应TCP控制块, 若在tcp_listen_pcbs链表中匹配,调用tcp_listen_input()。原创 2017-07-10 22:35:56 · 1582 阅读 · 1 评论 -
【LWIP】lwip_send,lwip_sendto,lwip_sendmsg函数分析
索引:一个基本的socket建立顺序是Server端:socket(),bind(), listen(), accept(), recv(),recvfrom(),recvmsg()Client端:socket(), connect(), send(),sendto(),sendmsg()基础知识:LWIP通信邮箱,netconn结构体流程图:原创 2017-08-29 17:27:24 · 6218 阅读 · 2 评论 -
【TCP/IP详解】【pause】以太网(PAUSE)流量控制原理
关键词:以太网 数据链路层 PAUSE帧 流量控制。摘 要:PAUSE操作实现了一种简单的停-等式流量控制机制,可以防止瞬时过载导致缓冲区溢出时不必要的帧丢失。以太网流控的引入硬件成本和数据帧处理速度的限制,缓冲拥塞造成的丢帧率大于链路传输中位出错率,因此必须解决缓冲拥塞造成的丢帧问题。(如何查看哪一层丢帧了?1000M网卡设备使用UDP发送数据给10M/100...原创 2019-09-30 14:52:29 · 16681 阅读 · 11 评论 -
【LWIP】netif网络接口结构
在 LWIP 中,是通过一个叫做 netif 的结构体来描述一个硬件网络接口的。 struct netif { struct netif *next; // 指向下一个 netif 结构的指针 struct ip_addr原创 2017-04-11 15:53:52 · 1028 阅读 · 0 评论 -
【LWIP】pbuf数据包管理
在《SylixOS_LWIP协议栈学习: 动态内存管理》中提到过:LWIP中常用的内存分配策略有两种,一种是内存堆分配,一种是内存池分配。 内存堆能分配合理的任意大小的内存块,缺点是当经过多次的分配释放后,内存堆中间会出现很多碎片,使得需要分配较大内存块时分配失败; 内存池分配速度快,通过简单的链表操作(各种类型的 POOL 已经分配内存,大小固定),但是采用 POOL 会浪费原创 2017-04-11 15:52:56 · 917 阅读 · 0 评论 -
【LWIP】LWIP动态内存管理
1.LWIP中的动态内存管理有三种方式 运行时C库自带的内存分配方式、LWIP中自带的内存堆(HEAP)分配方式、内存池(POOL)分配方式。 内存堆的特点是对一块事先分配好的内存块进行合理有效的组织和管理,主要用于任意大小的内存分配。缺点是容易产生内存碎片。 内存池的特点是预先开辟许多固定大小的内存块组织成链表,实现快速分配/回收,且不会产生原创 2017-04-11 15:51:54 · 885 阅读 · 1 评论 -
【TCP/IP详解】ICMP报文格式
解析类型:占一字节,标识ICMP报文的类型,目前已定义了14种,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文。 代码:占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型。 校验和:这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错。其计算方法与在我们介绍IP报头中的校验和计算方法是一样的。不同的ICMP报文类型...原创 2020-12-20 22:16:40 · 867 阅读 · 1 评论 -
【TCP/IP详解】UDP报文格式
解析:16位源端口号:这个字段通常包含发送数据报的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为 0。这样,接收端的应用程序就不能发送响应了。 16位目的端口号:接收端计算机上 UDP 软件使用的端口,占据 16 位。 16位UDP长度:该字段表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。因为 UDP 报文头长度是 8 个...原创 2020-12-20 22:16:33 · 956 阅读 · 1 评论 -
【TCP/IP详解】TCP报文格式
解析:16位源端口号:源端口和IP地址的作用是标识报文的返回地址。(用来标识同一台计算机的不同的应用进程。) 16位目的端口号:端口指明接收方计算机上的应用程序接口。 32位序号:本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。 32位确认序号:即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到...原创 2020-12-20 22:16:14 · 950 阅读 · 1 评论 -
【TCP/IP详解】IP报文格式
解析:4位版本:目前的协议版本号是4,因此IP有时也称作IPv4。 4位首部长度:普通的IP首部长为20个字节,除非含有选项字段。最高位在左边,记为0 bit;最低位在右边,记为31 bit。 8位服务类型(TOS):字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位,但必须置0。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。 4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。注意:...原创 2020-12-20 22:16:05 · 1918 阅读 · 1 评论 -
【TCP/IP详解】以太网帧格式
以太网帧格式:0411-3.jpg(40.53 KB, 下载次数: 0)下载附件半小时前上传解析:以太网目的地址:接收方设备的硬件地址(48bit,目的地址全为1的特殊地址是广播地址)。以太网源地址:发送方的硬件地址帧类型:表示后面数据的类型(其中,0x0806表示后面的数据是属于ARP包的,0x8035表示后面的数据属于原创 2017-04-11 18:00:42 · 2811 阅读 · 0 评论 -
【TCP/IP详解】ARP报文格式 | RARP报文格式
ARP报文类型:0411-2.png(37.59 KB, 下载次数: 0)下载附件25分钟前上传解析:以太网目的地址:接收方设备的硬件地址(48bit,目的地址全为1的特殊地址是广播地址)。以太网源地址:发送方的硬件地址帧类型:表示后面数据的类型(其中,0x0806表示后面的数据是属于ARP包的,其他还可能属于IP包)原创 2017-04-11 16:58:52 · 8875 阅读 · 0 评论