协议栈
文章平均质量分 92
老王不让用
芝兰生于幽谷,不以无人而不芳; 君子修身立德,不为穷困而改节
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
TCP Fast Open原理和使用
TFO转载 2023-01-03 15:29:44 · 1987 阅读 · 0 评论 -
KCP 协议源码解析
KCP实现转载 2022-12-26 15:59:15 · 1276 阅读 · 0 评论 -
集线器、交换机、网桥区别
目录1 集线器2 网桥3 交换机4 网桥和交换机的工作原理及区别?4.1 网桥的连接模式:(红点处为HUB)4.2 交换机连接模式4.3 网桥的工作原理4.4 交换机有些许不同4.5 值得注意的一些问题4.5.1 网桥需要软件辅助?4.5.2网桥用于连接不同的网段?(搜索百度时查到一个答案)4.6这里再次总结一下网桥和交换机最近一直在看网络方面的东东,先把基础的东西总结一下,注意:以下的概念现在已经不一定准确了,因为硬件发展相当迅速,集成电路的集成度越..转载 2020-12-27 18:40:26 · 1507 阅读 · 2 评论 -
网桥的工作原理
目录1功能介绍2题目分析1功能介绍网桥工作在数据链路层,起到的作用是把多个 “局域网” 连接起来,组成更大的局域网。它的功能主要有两点:过滤和转发。通常来看,网桥起到了把不同局域网连接在一起的作用,即使这些局域网使用不同的协议比如802.11和802.3。加入一个网桥连接一个802.3和一个802.11,那么网桥转发的时候首先需要把802.3的帧头拆掉,换成802.11的头,再转发给802.11使之适应无线局域网的帧格式。我们来看看网桥的过滤和转发功能:网桥连接着局域网...转载 2020-12-27 18:31:31 · 12830 阅读 · 3 评论 -
linux内核协议栈 邻居协议之 arp 数据包收发处理流程
前言在arp初始化时,通过调用dev_add_pack将arp协议的接收处理函数添加到了三层协议数据包处理函数相关的hash链表ptype_base中(关于三层协议数据包处理函数相关的hash链表,请参考文档http://blog.youkuaiyun.com/lickylin/article/details/22900401)。当底层接收到属于本机的arp数据包时,就会调用arp_rcv进行后续处理。1 arp数据包文接收arp_rcv()功能:对接收到的arp数据包的处理函数首先对arp数据...转载 2020-11-16 16:05:19 · 6829 阅读 · 1 评论 -
linux内核协议栈 邻居协议之ARP协议处理初始化
目录前言1arp协议相关数据结构1.1 arp协议格式1.2 arp数据结构1.3 arp操作码2 arp协议初始化arp_init()2.1 邻居表初始化 neigh_table_init()2.1.1初始化邻居表项成员 neigh_table_init_no_netlink()2.2 arp表初始值struct neigh_table arp_tbl3 arp协议邻居项的初始化函数 arp_constructor()前言上面分析完了通用邻居层的架构...转载 2020-11-16 14:00:14 · 1340 阅读 · 1 评论 -
linux内核协议栈 邻居协议之通用邻居项的状态机机制【核心】
1邻居几个核心状态邻居项的状态机机制是通用邻居层最重要的内容,主要是处理邻居项中状态的改变,其中包括几个邻居状态的定时器机制,以及邻居项的更新,solicit请求的发送等对于通用邻居项的状态机,主要有如下几个状态:NUD_INCOMPLETE NUD_REACHABLE NUD_STALE NUD_DELAY NUD_PROBE NUD_FAILED NUD_NOARP NUD_PERMANENT 其中,处于如下状态的邻居项,都会启动一个定时器:#define NUD..转载 2020-11-15 21:33:32 · 2185 阅读 · 0 评论 -
linux内核协议栈 邻居协议之通用邻居项的创建、查找、删除等相关函数
目录前言1邻居表项创建neigh_create()1.1邻居表项内存申请与初始化neigh_alloc()1.2邻居hash表扩容 neigh_hash_grow()2邻居表项查找2.1neigh_lookup()2.2neigh_lookup_nodev()2.3查找+条件创建 __neigh_lookup()2.4查找+默认创建 __neigh_lookup_errno()3邻居表项销毁neigh_destroy()3.1邻居表项条件...转载 2020-11-15 16:55:35 · 1236 阅读 · 0 评论 -
linux内核协议栈 邻居协议之通用邻居项的垃圾回收机制
目录前言1 同步(强制)回收处理函数 neigh_forced_gc()2异步(周期)回收处理函数 neigh_periodic_work()前言对于通用邻居层,我认为主要可以分为三个方面:邻居项处理函数,包括邻居项创建、更新、删除等 邻居项的状态机机制,主要是处理邻居项中状态的改变,其中包括几个邻居状态的定时器机制,也包括发送solicit请求等 邻居项的垃圾回收机制,主要是负责回收一个邻居表里长时间不用的邻居项,已节省邻居缓存空间。这三个方面需要相互协调工作,才能完成通用邻.转载 2020-11-15 14:45:27 · 979 阅读 · 0 评论 -
linux内核协议栈 邻居协议相关数据结构
目录前言1 邻居基本状态2邻居组合状态2.1NUD_IN_TIMER2.2NUD_VALID2.3NUD_CONNECTED3邻居相关结构体3.1领居表项参数struct neigh_parms3.2领居表项操作函数struct neigh_ops3.3领居表项struct neighbour3.4邻居表struct neigh_table前言在linux代码中,对于不同的邻居项,抽象出了一个通用的模型,通用邻居层,主要是用来进行...转载 2020-11-15 12:24:32 · 1010 阅读 · 0 评论 -
iptables 中 SNAT、DNAT 和 MASQUERADE 的含义
IPtables中可以灵活的做各种网络地址转换(NAT),网络地址转换主要有两种:SNAT和DNAT。SNAT是source networkaddress translation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报转载 2020-12-02 16:38:13 · 2842 阅读 · 0 评论 -
虚拟路由冗余协议(VRRP)
1 VRRP简介1.1 定义虚拟路由冗余协议VRRP(Virtual Router Redundancy Protocol)通过把几台路由设备联合组成一台虚拟的路由设备,将虚拟路由设备的IP地址作为用户的默认网关实现与外部网络通信。当网关设备发生故障时,VRRP机制能够选举新的网关设备承担数据流量,从而保障网络的可靠通信。##目的:VRRP能够在不改变组网的情况下,采用将多台路由设备组成一个虚拟路由器,通过配置虚拟路由器的IP地址为默认网关,实现默认网关的备份。当网关设备发生故障时,V...转载 2020-11-20 23:05:23 · 1801 阅读 · 0 评论 -
IPv6 协议简述
1 IPv6简介IPv6(Internet Protocol Version 6)是网络层协议的第二代标准协议,也被称为IPng(IP Next Generation)。它是Internet工程任务组IETF(Internet Engineering Task Force)设计的一套规范,是IPv4(Internet Protocol Version 4)的升级版本。1.1 引入目的IPv4协议是目前广泛部署的因特网协议。在因特网发展初期,IPv4以其协议简单、易于实现、互操作性好的优势而得到快转载 2020-11-19 22:45:58 · 5904 阅读 · 1 评论 -
VLAN基本原理及应用
目录1 为什么需要VLAN1.1什么是VLAN?1.2 未分割广播域时……1.3广播信息是那么经常发出的吗?1.4 广播域的分割与VLAN的必要性2 实现VLAN的机制2.1 直观地描述VLAN2.2需要VLAN间通信时怎么办3 VLAN的访问链接(Access Link)3.1 交换机的端口类型3.2 访问链接3.3 静态VLAN——基于端口3.4 动态VLAN3.4.1 基于MAC地址的VLAN3.4.2 基于IP地址的VLAN3.4...转载 2020-11-18 16:33:14 · 2028 阅读 · 0 评论 -
linux内核协议栈 邻居协议概述
1 什么是邻居协议?NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测、重复地址监测、地址自动配置等功能。这里先以ARP探测来剖析邻居协议。如果一台主机和你的计算机连接在同一个LAN上(也就是说,你和这台主机通过一个共享介质相连或点对点直接相连),那么它就是你的邻居,而且他们有相同的L3网络配置。转载 2020-11-15 11:31:58 · 947 阅读 · 0 评论 -
ARP协议报文格式及ARP表简述
目录1 ARP协议报文概述1.1 ARP报文格式1.2 ARP报文抓包1.2.1 arp请求1.2.2 arp应答2 ARP映射表2.1 动态ARP表项2.2 静态ARP表项2.3 短静态ARP表项2.4 长静态ARP表项1 ARP协议报文概述ARP(Address Resolution Protocal,地址解析协议)是将IP地址解析为以太网的MAC地址(或者称为物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备时,它必须知道对转载 2020-11-11 17:36:21 · 11343 阅读 · 1 评论 -
linux内核协议栈 TCP服务器端接收SYN请求段 Ⅱ 之发送SYN+ACK报文
Table of Contents1 SYN+ACK报文发送场景概述2SYN+ACK报文发送tcp_v4_send_synack()2.1 SYN+ACK报文够造 tcp_make_synack()2.1.1 SYN+ACK报文内存分配sock_wmalloc3SYN+ACK报文超时处理tcp_synack_timer3.1 inet_csk_reqsk_queue_prune()1 SYN+ACK报文发送场景概述当 tcp 服务器端收到SYN包后,将会调用 tcp...转载 2020-10-03 22:47:51 · 2092 阅读 · 0 评论 -
linux内核协议栈 TCP服务器端接收SYN请求段Ⅰ
Table of Contents1tcpserver 接收 SYN 概述2tcpserver 接收 SYN处理过程2.1tcp层的数据包输入接口 tcp_v4_rcv2.2 tcp_v4_do_rcv()2.3tcp_rcv_state_process()2.4tcp处理SYN请求接口 tcp_v4_conn_request()(核心)2.4.1 SYN请求队列(半连接)已满判断inet_csk_reqsk_queue_is_full2.4.2 acc...转载 2020-10-03 10:09:42 · 1299 阅读 · 0 评论 -
linux内核协议栈 connect 系统调用Ⅱ 之收到 SYN+ACK,发送 ACK
Table of Contents1 connect阻塞模式概述2. 客户端收到SYN+ACK报文2.1 tcp_rcv_state_process()2.2 SYN_SENT状态输入报文处理2.2.1 关于同时打开状态迁移3. 向服务器端发送ACK1 connect阻塞模式概述当客户端调用 connect 发送 SYN 之后,会将其状态切换成 SYN_SENT,此时如果如果套接字sock为非阻塞模式,connect系统调用会直接返回,如果sock为阻塞模式,connec..转载 2020-10-02 18:20:20 · 1334 阅读 · 0 评论 -
linux内核协议栈 connect 系统调用Ⅰ之 发送 SYN 包
客户端通过调用connect()系统调用建立与服务器的连接,对应到TCP协议层次,核心操作就是TCP的三次握手(从客户端角度),由于整个过程涉及内容较多,分两部分来看connect()的实现,这篇笔记是第一部分,包括系统调用入口以及SYN报文发送过程。2. connect 内核实现sys_connect --inet_stream_connect //TCP --tcp_v4_connect --inet_dgram_connect //UDP --ip4_datagram...转载 2020-10-02 11:52:07 · 2248 阅读 · 0 评论 -
linux 内核协议栈 TCP之连接请求队列
目录1. 请求队列概述2. 面向连接的套接字inet_connection_sock2.1 连接建立队列request_sock_queue2.2 SYN请求队列listen_sock 3. 连接请求块request_sock3.1 struct tcp_request_sock3.1.1 操作函数 struct tcp_request_sock_ops1. 请求队列概述TCP服务器端程序首先创建一个监听套接字,一旦有客户端连接该监听套接字,那么会创建一...转载 2020-09-30 15:19:29 · 1277 阅读 · 0 评论 -
linux内核协议栈 accept 系统调用
目录1. accept 功能概述2. accept 内核实现2.1sys_accept2.2 IPv4协议族 inet_accept 实现(核心)2.3. TCP协议实现inet_csk_accept(核心)2.3.1 获取通信套接字的TCB(reqsk_queue_get_child、核心)1. accept 功能概述从全连接队列中获取第一个请求套接字,根据队列是否为空、套接字是否设置阻塞状态决定系统调用是否阻塞 创建一个新的套接字 new_sock 用于和客户端通信.转载 2020-09-30 13:57:10 · 1725 阅读 · 0 评论 -
linux内核协议栈 listen 系统调用
目录1. listen功能概述2. TCP监听套接字的管理listening_hash3. listen内核实现3.1 sys_listen()3.1 inet_listen()3.2 inet_csk_listen_start()3.2.1 创建连接请求队列 request_sock_queue(核心)3.2.2 注册监听套接字到TCP全局监听hash表(核心)1. listen功能概述创建传入的backlog创建请求队列:半连接队列,全连接队列 将套接字的状..转载 2020-09-30 09:39:06 · 1372 阅读 · 1 评论 -
linux内核协议栈 bind 系统调用(TCP)
目录1. bind 概述2. 端口信息的管理2.1 端口信息inet_bind_bucket2.2 已绑定端口信息哈希表inet_bind_hashbucket3. bind 内核实现(tcp)3.1 sys_bind()3.2inet_bind()3.3 inet_csk_get_port()(核心)3.3.1 动态端口范围3.3.2 端口和套接字映射inet_bind_hash3.3.3 端口复用1. bind 概述应用程序可以通过bind()...转载 2020-09-29 18:26:21 · 2046 阅读 · 1 评论 -
linux内核协议栈 socket 创建流程
目录1、socket 概述2、socket 创建入口2.1、sys_socketcall2.2、sys_socket3、socket 创建过程3.1、sock_create(__sock_create)3.2、socket 节点分配以及初始化(sock_alloc)3.3、根据指定协议族继续初始化3.3.1、inet_create注册(inet_init)3.3.2、inet_create调用(核心)1、socket 概述为了建立Socket,程序可以调用So转载 2020-09-11 16:17:11 · 3424 阅读 · 0 评论 -
FTP的主动模式和被动模式工作原理
目录1、链路分类2、控制链路3、数据链路3.1、被动模式(PASV)3.2、主动模式(PORT)3.3、两种模式数据链路区别4、FTP 相关命令4.1、登录4.2、建立文件传输套接字通信4.3、操作文件4.4、目录操作4.5、模式与类型4.6、参数信息4.7、其他不常用的命令4.8、FTP服务端的响应码1、链路分类 FTP是仅基于TCP的服务,与众不同的是FTP协议要用到两个TCP连接,一个是控制链路,用来在客户端与服务器之间传递...原创 2020-08-05 19:14:06 · 5175 阅读 · 0 评论 -
SSH 两种登录方式
1、定义SecureShell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。2、安全.转载 2020-08-05 19:14:23 · 3327 阅读 · 0 评论 -
如何判断目标主机是否在监听一个UDP端口(阿里云二面)
面试官:我问一个简单的问题,如何判断目标主机是否在监听一个UDP端口port?我:给目标主机发送一个UDP报文(含目标port),如果收到回复,表示监听,否则表示没有监听。面试官:有没有通用一点的方法我:没有也许面试官只是随口问一个简单的问题,但我就是不会,没有考虑一些异常场景,所以面试官看我这个问题都答不好,干脆不想问了,面试直接结束,凉凉。目录1、TCP监听端口1.1、connect接口1.2、telnet指令1.3、nc 指令2、UDP监听端口2.1、nc原创 2020-08-02 15:14:31 · 3504 阅读 · 0 评论 -
traceroute、tracert服务的工作原理
traceroute命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。linux上称之为traceroute,windos则为Tracert。《TCP/IP 卷一》描述traceroute工作过程:“ 首先,traceroute 送出一个TTL是1的IP数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源...原创 2020-08-02 15:19:03 · 2781 阅读 · 0 评论 -
socket编程:select、poll、epoll 区别
https://www.cnblogs.com/aspirant/p/9166944.html1.1.3 网络编程相关基础问题1: 网络IO模型有哪些?5种网络I/O模型,阻塞、非阻塞、I/O多路复用、信号驱动IO、异步I/O。从数据从I/O设备到内核态,内核态到进程用户态分别描述这5种的区别。问题2: I/O多路复用中select/poll/epoll的区别?从select...转载 2020-05-10 18:57:07 · 2271 阅读 · 1 评论 -
socket编程:信号驱动式I/O实现
信号驱动式 I/O 的本质就是:进程预先告知内核当某个描述符发生事件时,内核会向该进程发送SIGIO信号量通知进程,进程可在信号处理函数中进行处理。 进程可以通过 fcntl 打开 O_ASYNC标 志或 ioctl 打开 FIOASYNC 标志来通知内核,二者的区别是一些系统不支持 fcntl,所以应尽量使用 ioctl 。对于 socket 产生 SIGIO的条件:TCP套接字:1.监听套接字上有新连接请求完成2.某个断连请求发起3.某个断连请求完成4.数据到...转载 2020-05-09 10:47:03 · 1051 阅读 · 0 评论 -
TCP协议:SYN、ACK、ISN、SeqNumber
转载:https://blog.youkuaiyun.com/feng125452/article/details/33347169 https://blog.youkuaiyun.com/qq_35733751/article/details/80552037 https://blog.youkuaiyun.com/zhangqi_gsts/article/details/50617...转载 2019-07-31 15:37:54 · 11161 阅读 · 0 评论 -
dpdk大页内存实现
前言 所谓的dpdk大页内存的实现,说白了就是dpdk自己实现了一套大页内存的使用库,这个和libhugetlbfs.so是类似的,就是自己实现了大页内存的申请,释放操作, 替代了传统的malloc, free系统调用。先从整体上看下dpdk大页内存有哪些内容。 当应用层需要申请内存时,直接调用rte_malloc接口进...转载 2020-01-15 14:43:16 · 1519 阅读 · 0 评论 -
tcp报文路由传输过程
以太网报文封装:1、以太网报文结构:src_mac,dst_mac,vlan号(非必须),网络层协议号2、dst_mac为网关mac是通过路由获取,a、arp学到目的ip地址所在的remote_mac地址,则证明客户端和服务器统一局域网内:dst_mac=remote_mac,报文直接通过交换机(通过MAC和接口的映射表)即可传输;b、arp没有学习到remote_mac地址,则通过路由查...原创 2019-04-24 18:29:51 · 3394 阅读 · 0 评论 -
linux下配置路由网关和转发接口
linux配置路由:1、 [root@localhost ~]# route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.10.1 SIOCADDRT: No such process //网关指定错误,下一跳必须可达2、 [root@localhost ~]# route add -net 192.168.10....原创 2019-04-29 18:37:39 · 3491 阅读 · 0 评论 -
Linux网络编程 之多播、组播
目录1 概述2 多播地址3 多播地址与 MAC 地址的映射3 Linux多播编程3.1 套接口选项3.2 组播包接收3.3组播包发送3.4测试结果1 概述单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。IP 多播(也称多址广播或组播)技术,是一种允..转载 2019-05-08 14:58:31 · 2120 阅读 · 0 评论 -
socket编程:bind 函数说明
int bind( SOCKET s, const struct sockaddr FAR *name, int namelen );(1)这个函数接收三个参数。第一个参数s指定要绑定的套接字,第二个参数指定了该套接字的本地地址信息,是指向sockaddr结构的指针变量,由于该地址结构是为所有的地址家族准备的,这个结构可能(通常会)随所使用的网络协议不同而不同,所以,要用第三个参数指定该地址结...原创 2019-05-06 10:44:28 · 1694 阅读 · 0 评论 -
Linux下UDP广播发送接受
转载:https://blog.youkuaiyun.com/maopig/article/details/7331898网络通信基础如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口。因为同一主机上的程序使用网络是通过端口号来区分的。UDP Socket的使用过程:1. 初始化网络库2. 创建SOCK_DGRAM类型的Soc...转载 2019-05-06 21:22:48 · 5898 阅读 · 0 评论 -
socket编程:socket接口创建套接字(原始套接字)使用说明
转载:https://blog.youkuaiyun.com/s2603898260/article/details/850200061.原始套接字使用场景我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只包括应用层数据,原有的头部信息在传递过程中被隐藏了。某些情况下我们需要执行更底层的操作,比如...转载 2019-05-16 09:37:15 · 4390 阅读 · 0 评论 -
TCP协议:报文字段解析
转载:https://www.cnblogs.com/feng9exe/p/8058891.htmlTCP报文是TCP层传输的数据单元,也叫报文段。1、端口号:用来标识同一台计算机的不同的应用进程。1)源端口:源端口和IP地址的作用是标识报文的返回地址。2)目的端口:端口指明接收方计算机上的应用程序接口。TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的I...原创 2019-07-04 11:04:47 · 9101 阅读 · 0 评论
分享