:数据从高层往下层传递,每经过一层封装一层,直到物理层 接受数据:数据从下层往高层传递,每经过一层解封装一层.直到获得原始数据 路由器和链路层交换机都是收到数据传递到最高层,然后处理完毕之后再发送数据,...套接字将这些报文传输到接受进程的套接字 也就是说套接字像一个管道的两端,发送进程发送信息到管道里面(也就是传递给套接字),接受进程从管道里面接受信息(从套接字里面获取信息),具体管道怎么实现的进程不需要了解...TCP的基础:“连接”,将连接用套接字标记 UDP套接字 目的端口 目的地址 TCP套接字 目的端口 目的地址 源端口 源地址 多路复用 运输层从主机的不同套接字中收集数据,为数据加上首部信息转发到网络层...多个来源一个目的,不同套接字的数据转发到一个出口(即网络层) 多路分解 运输层的报文段根据首部交付到正确的套接字 一个来源多个目的,一个网络层的数据可以根据套接字的不同转发到不同的端口 3.3 UDP...链路:沿着通信路径连接相邻节点的通信信道 帧:数据链路层的分组单元 服务 成帧,链路访问 差错检测 可靠传递 流量控制 差错纠正 6.2 差错检测 CRC循环校验码 6.3 多路访问链路和协议 广播信道的特点
原始套接字简介 普通 socket 的权力和原始 socket 权力对比。 1.原始 socket 可以和内核一样直接对所有层进行操作(除了物理层)。可以更改 mac 更改 ip 更改端口。...一种是处理IP层即其上的数据,通过指定socket第一个参数为AF_INET来创建这种套接字。有两种原始套接字。...(ETH_P_IP|ETH_P_ARP|ETH_P_ALL)) 发送接收以太网数据帧这种套接字比较强大,可以监听网卡上的所有数据帧 能: 接收发往本地mac的数据帧 能: 接收从本机发送出去的数据帧...类型的数据帧 ETH_P_ARP 0x806 只接受发往本机mac的arp类型的数据帧 ETH_P_RARP 0x8035 只接受发往本机mac的rarp类型的数据帧 ETH_P_ALL 0x3...\n"); break; } else if (n==0) continue; //接收数据不包括数据链路帧头
结论先行 先说结论:通过PF_PACKET这个特殊的套接字协议,直接接收来自链路层的帧。...实际上,在网卡驱动程序通知内核接受到数据帧的时候,数据包就已经进入了内核处理流程。具体的区别,可以见下图。...image.png 普通套接字的收包流程 先来看看,普通的套接字的收包路径在内核中是怎么样。 以最常见的以太网网卡,当网卡接口接收到了一个帧,那么接受者知道它一定包含了一个Ethernet报头。...PF_PACKET套接字的收包流程 当创建PF_PACKET套接字时,与协议相关的数据包类型将被同时注册进ptype_all和ptype_base,接受函数为packet_rcb()。...值得一提的是,tcpdump依赖的libpcap库并非使用原始套接字+recvfrom的方式收包,而是在内核空间分配一块内核缓冲区,然后用户空间调用mmap系统调用映射到用户空间。
但是后面由于Linux服务端没有调用close()函数关闭socket链路,也即没有发送FIN标志的报文给主动关闭TCP链路的客户端,所以造成这个问题。...2 原因分析:从服务端程序出发 在服务端程序的第69行可以看到:一旦客户端关闭socket后,服务端也会调用close( client_sockfd );来关闭链路。...其实不然,在查阅了相关资料后,个人觉得正确的理解如下: listen()函数不会使进程阻塞,UNP第3版84页有一句话:listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应接受指向该该套接字的连接请求...内核为任何一个给定的监听套接字维护两个队列:未完成连接队列和已完成连接队列。 因此,三次握手是由内核自动完成的,无需服务器进程插手。...4 总结 socket被动关闭的服务端产生CLOSE_WAIT的根本原因是没有调用close()函数关闭socket链路,也即没有发送FIN标志的报文给主动关闭TCP链路的客户端。
对于在链路的一端仅有一个发送方、链路的另一端仅有一个接收方的点对点链路,MAC协议比较简单(或者不存在),即无论何吋链路空闲,发送方都能够发送帧。...(1)名词 点对点链路(point-to-point link):由链路一端的单个发送方和链路另一端的单个接收方组成,如点对点协议(point-to-point protocol, PPP)和 高级数据链路控制...交换机缓存帧并且决不会在网段上同时传输多于一个帧 异质的链路:交换机将链路彼此隔离,因此局域网中的不同链路能够以不同的速率运行并且能够在不同的媒体上运行 管理:如果一个适配器工作异常并持续发送以太网帧(...从数据报抽取出TCP SYN 报文并分解到与端口 80相联系的欢迎套接字。对于谷歌HTTP服务器和Bob便携机之间 的TCP连接生成一个连接套接字。...数据报在操作系统中分解到TCP套接字,从而进入连接状态 借助于Bob便携机上的套接字,Bob的浏览器生成包含要获取的URL的HTTP GET报文。
这是一个二层协议,它提供了一种标准方式来发现链路连接关系的能力,使得接入网络的一台设备可以将其主要的能力,管理地址,设备标识,接口标识等信息组织成不同的TLV(Type/Length/Value),并封装在...LLDP协议有四种工作模式: TxRx:既发送也接收LLDP帧 Tx: 只发送不接收LLDP帧 Rx:只接收不发送LLDP 帧 Disable:既不发送也不接收 LLDP的工作原理 LLDP协议,从本质上来讲就是一个信息发现和通告协议...3 获取lldp邻居信息 通过lldptool linux提供了一个工具 lldptool 来查询和管理lldp信息。...通过原始套接字,抓取lldp数据帧 当然除了使用lldptool 工具来获取拓扑 信息,还可以自己通过抓取lldp 报文来分析相关的TLV信息,进而获取相连的邻居信息。...下面一个就是我通过原始套接字抓取的lldp 信息: 可以看到,列表中的每一项均为,key,value的 元组形式,其中key表示的就是TLV type,value就是该type的所表示的具体信息,当前是以二进制的形式
对单一物理链路来说,大尺寸MTU通常会带来更好的性能,因为它需要的开销更小;反之,对嘈杂的链路(链路聚合)来说,更小的MTU则通常会提升性能,因为,当单个帧被损坏时,它要重传的数据更少。...当与远程机器连接时,本地应用程序用一个网络套接字来打开远程机器上的一个端口。 Linux网络性能工具可以跟踪流经特定网络端口的数据量。...carrier 由于链路介质故障(如故障电缆)而丢弃的数据包数量 ifconfig提供的统计数据显示的是自系统启动开始的累计数值。...当多个设备试图同时使用网络时就会发生冲突 sar sar提供了链路级的网络性能数据。但是,它同时还提供了一些关于传输层打开的套接字数量的基本信息。...名字中带有socket的是网络套接字。之后就可以利用这些信息来确定程序中的哪个套接字产生了这些通信。
低三层 物理层:机械,电子,定时接口通信信道上的原始比特流传输。 数据链路层:物理寻址,同时将原始比特流转变为逻辑传输线路。...通过验证,确认和反馈重发等手段,形成稳定的数据链路,发送(010101)怎么样确定稳定的传输到另一端,软硬结合的,形成一个保障。 网络层:进行路由选择和流量控制,分组传输,路由选择(IP协议)。...这是个逻辑链路,没有真实的存在。 传输层:是个承上启下,提供可靠的端口到端口的数据传输服务(TCP/UDP协议)。 高三层 会话层:负责建立,管理和终止进程之间的会话和数据交换。...原始套接字SOCK_RAM(面向网络层协议接口IP,ICMP等) socket API 及其调用过程 1、创建服务器套接字---分配内存、初始化 2、服务器套接字--侦听 3、建立与客户端配套的客户端套接字...4、与客户端通讯(可以多客户端) 5、关闭、销毁[服务器端相应套接字 客户端: 1、创建客户端套接字---[分配内存]初始化 2、连接服务器 3、与服务器通讯 4、关闭、销毁客户端套接字 PS:在实际的工作中
数据链路层 数据链路层的主要任务是实现计算机网络中相邻节点之间的可靠传输,把原始的、有差错的物理传输线路加上数据链路协议以后,构成逻辑上可靠的数据链路。...需要完成的功能有链路管理、成帧、差错控制以及流量控制等。其中成帧是对物理层的原始比特流进行界定,数据链路层也能够对帧的丢失进行处理。...UDP网络通信的收包过程: 使用DatagramSocket()创建一个数据包套接字,绑定到指定的端口。...构造方法主要有以下几种形式: ServerSocket():创建非绑定服务器套接字。 ServerSocket(int port):创建绑定到特定端口的服务器套接字。...ServerSocket(int port,int backlog):利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号。
Linux和其他主流操作系统中的网络流量被抽象(协议分层与OSI参考模型)为一系列的硬件和软件层次。在每个分层上,发送端添加首部包装信息,经过路由器,接受端分离首部恢复数据。...这里要经过 路由寻址,地址转发,到达目标IP主机,到达目标 IP 之后,会有个入栈操作 接受数据(入站) : 当数据帧到达网卡时,网卡会使用 DMA缓存区 将数据帧复制到接收缓冲区。.../ipv4/udp_mem 945957 1261278 1891914 ┌──[root@liruilongs.github.io]-[~] └─$ 对于这两个参数的调优,在使用 sar 来查看链路级的网络性能数据...内核缓冲区不足而导致的接收帧丢弃率 txdrop/s 由于Linux内核缓冲区不足而导致的发送帧丢弃率 txcarr/s 由于载波错误而导致的发送帧丢弃率 rxfram/s 由于帧对齐错误而导致的接收帧丢弃率...carrier 由于链路介质故障(如故障电缆)而丢弃的数据包数量 如果 overruns 存在值,可能需要调整上面的内核参数,适当增大。
套接字有3种类型: 流式套接字,即TCP套接字,用SOCK_STREAM表示 数据报套接字,即UDP套接字(或称无连接套接字),用SOCK_DGRAM表示 原始套接字,用SOCK_RAM表示 本文主要分析...TCP套接字和UDP套接字。...服务器调用accept()函数来**接受**远程计算机的**连接请求**,建立起与客户机之间的通信连接。...当数据传输完毕后,UDP套接字中的客户端调用close()释放通信链路,但不再发送“断开连接通知”信息来通知服务器端释放通信链路。...参考: 《精通Linux C编程》- 程国钢 http://c.biancheng.net/socket/
小明的web浏览器通过生成一个TCP套接字开始了该过程,套接字用于向www.baidu.com发送HTTP请求。为了生成该套接字,小明的笔记本将需要知道www.baidu.com的IP地址。...IP数据报放置在链路层帧中,该链路适合将学校路由器连接到最左边的unicom路由器,并且该帧经这条链路发送。 15. ...前面也说过支配分组经unicom和某度网络之间的链路转发的路由器转发表项,是由BGP协议决定的。 20. 最终,包含TCP SYN的数据报到达www.baidu.com。...从数据报抽取出TCP SYN报文并分解到与端口80相联系的套接字。对于某度HTTP服务器和小明的笔记本电脑之间的TCP连接生成一个连接套接字。...产生一个TCP SYNACK报文段,将其放入向笔记本电脑寻址的一个IP数据报中,最后放入链路层帧,该链路适合将www.baidu.com连接到其第一跳路由器。 21.
sockket简介 socekt又称为‘套接字’,用于描述IP和地址端口,是一个通信链路的句柄,应用程序通常通过套接字向网络发出请求或者应答网络请求。...描述 socket.SOCK_STREAM 流式socket , for TCP (默认) socket.SOCK_DGRAM 数据报式socket , for UDP socket.SOCK_RAW 原始套接字...,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP...,flag]) 接受套接字的数据。...通常是一个元组(ipaddr,port) sk.fileno() 套接字的文件描述符 socket编程思路 TCP服务端 创建套接字,绑定套接字到本地IP与端口 开始监听连接 进入循环,不断接受客户端的连接请求
网络套接字与 WebSockets 网络套接字 网络套接字,或简称为套接字,用作内部端点,用于在运行在同一台计算机或同一网络上的不同计算机上的应用程序之间交换数据。...由于网络套接字用于多种网络协议(HTTP、FTP 等),因此可以同时使用多个套接字。套接字是由套接字的应用程序编程接口 ( API )定义的一组函数调用创建和使用的。...有几种类型的网络套接字: 数据报套接字(SOCK_DGRAM),也称为无连接套接字,使用用户数据报协议 (UDP)。数据报套接字支持双向消息流并保留记录边界。...这些套接字提供双向、可靠、有序和不重复的数据流,没有记录边界。 原始套接字(或原始 IP 套接字)通常在路由器和其他网络设备中可用。...这些套接字通常是面向数据报的,尽管它们的确切特性取决于协议提供的接口。大多数应用程序不使用原始套接字。提供它们是为了支持新通信协议的开发,并提供对现有协议更深奥的设施的访问。
连接端点 TCP的连接端点称为 套接字(socket),根据TCP协议的规定,端口号拼接到IP地址即构成了套接字。 也就是说TCP连接的端点不是主机,不是IP不是应用进程,而是套接字。...套接字 socket = (IP地址:端口号) 套接字 socket = (IP地址: 端口号) TCP 连接 ::= {socket1, socket2} = {(IP1: port1), (IP2:...在具体的物理网络的链路层,我们看到的只是 MAC 帧,IP 数据报被封装在 MAC帧里面。 MAC 帧在不同的网络上传送时,其MAC 帧的首部是不同的。这种变化,在上面的IP 层上是看不到的。...作用:拥塞控制就是为了防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不至于过载。拥塞控制要做的都有一个前提:就是网络能够承受现有的网络负荷。...它的任务是处理发送能力大于接受能力。 ---- 下篇文章中,我们将介绍传输层上关于UDP,窗口,连接确认更丰富的内容,敬请期待。由于作者水平有限,文中的观点有不确切之处,欢迎评论讨论。
初始化 SocketCAN中大部分的数据结构和函数在头文件linux/can.h 中进行了定义。CAN总线套接字的创建采用标准的网络套接字操作来完成。...数据发送 在数据收发的内容方面,CAN总线与标准套接字通信稍有不同,每一次通信都采用can_ frame结构体将数据封装成帧。...这样的话,原始套接字就会忽略所有接收到的报文。在这种仅仅发送数据的应用中,可以在内核中省略接收队列,以此减少CPU资源的消耗。...CAN总线接口对应的套接字上。...默认情况下,发送CAN报文的套接字不想接收自己发送的报文,因此发送套接字上的回环功能是关闭的。
点对点是指1条链路上就一个通信端和接收端,比如两个路由器通过串口相连 企业微信截图_15626396177043.png 帧格式规则为: 开始和结束都用0x7E,在同步链路中,通过零比特填充的硬件技术完成转义...,异步链路是连续输出0x7d(转义字符)0x5e做转义(遇到了0x7d就连续输出0x7d0x5d) 转义字符:防止某些通信双方的串行接口驱动程序或者调制解调器吧控制字符解释成特殊字符,另外用链路控制协议指定是否要对某些值...一般情况下,字符值小于0x20都会转义 同步链路:以帧为单位传输(每帧大小不固定) 异步链路:以字符为单位传输(传输大小是固定的,比如8字节),传输的首尾分别增加起始符合结束符 零比特填充技术:边界符...CRC(帧检查序列)是一个循环冗余检验码 相对SLIP的优点: 单串行线路支持多种协议 每一帧都有循环冗余检验 循环冗余检验:把原始的数据当做一个二进制,接收方和发送方选定一个除数,假定除数有4位,在原始数据二进制后添加...链路层[以太网(1500字节)和802.3(1492字节)]对数据帧的长度存在限制。 路径MTU:两台主机中的路由不同,而每个网络链路层的MTU可能不同,这样的通信主机之间的最小MTU为路径路由
BSD的BSD分组过滤器BPF SVR4的数据链路提供者接口DLPI Linux的SOCK_PACKET接口 2....BPF: BSD分组过滤器 虽然在数据链路嵌入一个分组捕获机制并不困难,BPF的强大威力却在于它的过滤功能。...DLPI:数据链路提供者接口 应用进程介入数据链路层只需打开设备(例如le0)并使用DLPI的DL_ATTACH_REQQ请求将它与DLPI附接就可以了。...Linux:SOCK_PACKET 从数据链路获取所有帧 fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL)); 获得IPv4帧 fd = socket...它提供普通的套接口接收缓冲区,但多个帧不能缓冲在一起,一次性的由应用进程读取。这么一来从内核向应用进程拷贝大量数据的开销势必增长 (2)Linux不提供针对设备的过滤。
Link encap:链路封装类型为以太网。 HWaddr 00:0C:29:68:8C:9D:MAC 地址为 00:0C:29:68:8C:9D。...link/loopback:表示这是一个回环链路,MAC 地址为 00:00:00:00:00:00。 2: eth0:这是以太网接口(eth0)。...link/ether:表示这是一个以太网链路,MAC 地址为 00:0c:29:68:8c:9d。...-l:显示监听状态的套接字。 -p:显示使用套接字的进程及其 PID。 -r:显示路由表。 -i:显示网络接口。 -s:显示网络统计信息。...Flags:标志(如 ACC 表示套接字正在接受连接)。 Type:套接字类型(如 STREAM)。 State:连接状态(如 LISTENING)。
IO多路复用主要应用场景:①服务器需要同时处理多个处于监听或连接状态的套接字。②服务器需要同时处理多种网络协议的套接字。...②提供AIO功能,支持基于文件的异步IO操作和针对网络套接字的异步操作。 ③完善通道功能,包括对配置和多播数据报的支持等。...通常由一个独立的Acceptor线程负责监听客户端的连接,它接收到连接请求后为每个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出流返回应答给客户端,线程销毁。...⑤通过“ping/pong”帧保持链路激活。 ⑥服务器可以主动传递消息给客户端,不再需要客户端轮询。...一旦链路建立成功,就将链路注册到后端Reactor线程池的IO线程上,由IO线程负责后续IO操作。
领取专属 10元无门槛券
手把手带您无忧上云