TCP-IP协议详解(3) IP/ARP/RIP/BGP协议
网络层(network layer)是实现互联网的最重要的一层。正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet。更高层的协议,无论是TCP还是UDP,必须通过网络层的IP数据包(datagram)来传递信息。操作系统也会提供该层的socket,从而允许用户直接操作IP包。 IP数据包是符合IP协议的信息(也就是0/1序列),我们后面简称IP数据包为IP包。IP包分为头部(header)和数据(Data)两部分。数据部分是要传送的信息,头部是为了能够实现传输而附加的信息(这与以太网帧的头部功能相类似,如果对帧感到陌生,可参看 小喇叭 一文)。IP协议可以分为IPv4和IPv6两种。IPv6是改进版本,用于在未来取代IPv4协议。出于本文的目的,我们可以暂时忽略两者的区别,只以IPv4为例。下面是IPv4的格式IPv4包 我们按照4 bytes将整个序列折叠,以便更好的显示与帧类似,IP包的头部也有多个区域。我们将注意力放在红色的发出地(source address)和目的地(destination address)。它们都是IP地址。IPv4的地址为4 bytes的长度(也就是32位)。我们通常将IPv4的地址分为四个十进制的数,每个数的范围为0-255,比如192.0.0.1就是一个IP地址。填写在IP包头部的是该地址的二进制形式。IP地址是全球地址,它可以识别”社区”(局域网)和”房子”(主机)。这是通过将IP地址分类实现的。IP class From To Subnet MaskA 1.0.0.0 126.255.255.255 255.0.0.0B 128.0.0.0 191.255.255.255 255.255.0.0C 192.0.0.0 223.255.255.255 255.255.255.0每个IP地址的32位分为前后两部分,第一部分用来区分局域网,第二个部分用来区分该局域网的主机。子网掩码(Subnet Mask)告诉我们这两部分的分界线,比如255.0.0.0(也就是8个1和24个0)表示前8位用于区分局域网,后24位用于区分主机。由于A、B、C分类是已经规定好的,所以当一个IP地址属于B类范围时,我们就知道它的前16位和后16位分别表示局域网和主机。网络协议概览 中说,IP地址是分配给每个房子(计算机)的“邮编”。但这个说法并不精确。IP地址实际上识别的是网卡(NIC, Network Interface Card)。网卡是计算机的一个硬件,它在接收到网路信息之后,将信息交给计算机(处理器/内存)。当计算机需要发送信息的时候,也要通过网卡发送。一台计算机可以有不只一个网卡,比如笔记本就有一个以太网卡和一个WiFi网卡。计算机在接收或者发送信息的时候,要先决定想要通过哪个网卡。NIC路由器(router)实际上就是一台配备有多个网卡的专用电脑。它让网卡接入到不同的网络中,这样,就构成在 网络协议概览 中所说的邮局。比如下图中位于中间位置的路由器有两个网卡,地址分别为199.165.145.17和199.165.146.3。它们分别接入到两个网络:199.165.145和199.165.146。IP包的传输要通过路由器的接力。每一个主机和路由中都存有一个路由表(routing table)。路由表根据目的地的IP地址,规定了等待发送的IP包所应该走的路线。就好像下图的路标,如果地址是“东京”,那么请转左;如果地址是“悉尼”,那么请向右。A real world routing table比如我们从主机145.17生成发送到146.21的IP包:铺开信纸,写好信的开头(剩下数据部分可以是TCP包,可以是UDP包,也可以是任意乱写的字,我们暂时不关心),注明目的地IP地址(199.165.146.21)和发出地IP地址(199.165.145.17)。主机145.17随后参照自己的routing table,里面有三行记录:145.17 routing table (Genmask为子网掩码,Iface用于说明使用哪个网卡接口)Destination Gateway Genmask Iface199.165.145.0 0.0.0.0 255.255.255.0 eth00.0.0.0 199.165.145.17 0.0.0.0 eth0这里有两行记录。第一行表示,如果IP目的地是199.165.145.0这个网络的主机,那么只需要自己在eth0上的网卡直接传送(“本地社区”:直接送达),不需要前往router(Gateway 0.0.0.0 = “本地送信”)。第二行表示所有不符合第一行的IP目的地,都应该送往Gateway 199.165.145.17,也就是中间router接入在eth0的网卡IP地址(邮局在eth0的分支)。我们的IP包目的地为199.165.146.21,不符合第一行,所以按照第二行,发送到中间的router。主机145.17会将IP包放入帧的payload,并在帧的头部写上199.165.145.17对应的MAC地址,这样,就可以按照 以太网与wifi协议 中的方法在局域网中传送了。中间的router在收到IP包之后(实际上是收到以太协议的帧,然后从帧中的payload读取IP包),提取目的地IP地址,然后对照自己的routing table:Destination Gateway Genmask Iface199.165.145.0 0.0.0.0 255.255.255.0 eth0199.165.146.0 0.0.0.0 255.255.255.0 eth10.0.0.0 199.165.146.8 0.0.0.0 eth1从前两行我们看到,由于router横跨eth0和eth1两个网络,它可以直接通过eth0和eth1上的网卡直接传送IP包。第三行表示,如果是前面两行之外的IP地址,则需要通过eth1,送往199.165.146.8(右边的router)。我们的目的地符合第二行,所以将IP放入一个新的帧中,在帧的头部写上199.165.146.21的MAC地址,直接发往主机146.21。(在Linux下,可以使用$route -n来查看routing table)IP包可以进一步接力,到达更远的主机。IP包从主机出发,根据沿途路由器的routing table指导,在router间接力。IP包最终到达某个router,这个router与目标主机位于一个局域网中,可以直接建立连接层的通信。最后,IP包被送到目标主机。这样一个过程叫做routing(我们就叫IP包接力好了,路由这个词实在是混合了太多的意思)。整个过程中,IP包不断被主机和路由封装入帧(信封)并拆开,然后借助连接层,在局域网的各个NIC之间传送帧。整个过程中,我们的IP包的内容保持完整,没有发生变化。最终的效果是一个IP包从一个主机传送到另一个主机。利用IP包,我们不需要去操心底层(比如连接层)发生了什么。在上面的过程中,我们实际上假设了,每一台主机和路由都能了解局域网内的IP地址和MAC地址的对应关系,这是实现IP包封装(encapsulation)到帧的基本条件。IP地址与MAC地址的对应是通过ARP协议传播到局域网的每个主机和路由。每一台主机或路由中都有一个ARP cache,用以存储局域网内IP地址和MAC地址如何对应。ARP协议(ARP介于连接层和网络层之间,ARP包需要包裹在一个帧中)的工作方式如下:主机会发出一个ARP包,该ARP包中包含有自己的IP地址和MAC地址。通过ARP包,主机以广播的形式询问局域网上所有的主机和路由:我是IP地址xxxx,我的MAC地址是xxxx,有人知道199.165.146.4的MAC地址吗?拥有该IP地址的主机会回复发出请求的主机:哦,我知道,这个IP地址属于我的一个NIC,它的MAC地址是xxxxxx。由于发送ARP请求的主机采取的是广播形式,并附带有自己的IP地址和MAC地址,其他的主机和路由会同时检查自己的ARP cache,如果不符合,则更新自己的ARP cache。这样,经过几次ARP请求之后,ARP cache会达到稳定。如果局域网上设备发生变动,ARP重复上面过程。(在Linux下,可以使用$arp命令来查看ARP的过程。ARP协议只用于IPv4。IPv6使用Neighbor Discovery Protocol来替代ARP的功能。)我们还有另一个假设,就是每个主机和路由上都已经有了合理的routing table。这个routint table描述了网络的拓扑(topology)结构。如果你了解自己的网络连接,可以手写自己主机的routing table。但是,一个路由器可能有多个出口,所以routing table可能会很长。更重要的是,周围连接的其他路由器可能发生变动(比如新增路由器或者路由器坏掉),我们就需要routing table能及时将交通导向其他的出口。我们需要一种更加智能的探测周围的网络拓扑结构,并自动生成routing table。我们以北京地铁为例子。如果从机场前往朝阳门,那么可以采取2号航站楼->>三元桥->>东直门->>朝阳门。2号航站楼和朝阳门分别是出发和目的主机。而三元桥和东直门为中间的两个router。如果三元桥->>东直门段因为维修停运,我们需要更改三元桥的routing table,从而给前往朝阳门的乘客(IP包)指示:请走如下路线三元桥->>芍药居。然后依照芍药居的routing table前往朝阳门(芍药居->>东直门->>朝阳门)。一种用来生成routing table的协议是RIP(Routing Information Protocol)。它通过距离来决定routing table,所以属于distance-vector protocol。对于RIP来说,所谓的距离是从出发地到目的地途径的路由器数目(hop number)。比如上面从机场到朝阳门,按照2号航站楼->>三元桥->>东直门->>朝阳门路线,途径两个路由器,距离为2。我们最初可以手动生成三元桥的routing table。随后,根据RIP协议,三元桥向周围的路由器和主机广播自己前往各个IP的距离(比如到机场=0,团结湖=0,国贸=1,望京西=1,建国门=2)。收到RIP包的路由器和主机根据RIP包和自己到发送RIP包的主机的距离,算出自己前往各个IP的距离。东直门与三元桥的距离为1。东直门收到三元桥的RIP包(到机场的距离为0),那么东直门途径三元桥前往机场的距离为1+0=1。如果东直门自己的RIP记录都比这个远(比如东直门->>芍药居->>三元桥->>机场 = 2)。那么东直门更改自己的routing table:前往机场的交通都发往三元桥而不是芍药居。如果东直门自身的RIP记录并不差,那么东直门保持routing table不变。上述过程在各个点不断重复RIP广播/计算距离/更新routing table的过程,最终所有的主机和路由器都能生成最合理的路径(merge)。(RIP的基本逻辑是:如果A距离B为6,而我距离A为1,那么我途径A到B的距离为7)RIP出于技术上的原因(looping hops),认为距离超过15的IP不可到达。所以RIP更多用于互联网的一部分(比如整个中国电信的网络)。这样一个互联网的部分往往属于同一个ISP或者有同一个管理机构,所以叫做自治系统(AS,autonomous system)。自治系统内部的主机和路由根据通向外部的边界路由器来和其它的自治系统通信。各个边界路由器之间通过BGP(Border Gateway Protocol)来生成自己前往其它AS的routing table,而自治系统内部则参照边界路由器,使用RIP来决定routing table。BGP的基本工作过程与RIP类似,但在考虑距离的同时,也权衡比如政策、连接性能等其他因素,再决定交通的走向(routing table)。我们一开始讲述了IP包根据routing table进行接力的过程。为了顺利实现接力,我们又进一步深入到ARP和RIP/BGP。这三个协议都协助了IP传输。ARP让每台电脑和路由器知道自己局域网内IP地址和MAC地址的对应关系,从而顺利实现IP包到帧的封装。RIP协议可以生成自治系统内部合理的routing table。BGP协议可以生成自治系统外部的routing table。在整个过程中,我们都将注意力放在了IP包大的传输过程中,而故意忽略一些细节。 而上面的IP接力过程适用于IPv6。【TCP/IP详解】系列教程互联网协议入门 1互联网协议入门 2TCP-IP协议详解(1)网络协议概观TCP-IP协议详解(2) 以太网与WiFi协议TCP-IP协议详解(3) IP/ARP/RIP/BGP协议TCP-IP协议详解(4)IPv4与IPv6地址TCP-IP协议详解(5)IP协议详解TCP-IP协议详解(6) ICMP协议TCP-IP协议详解(7) UDP协议TCP-IP协议详解(8) TCP协议与流通信TCP-IP协议详解(9) TCP连接TCP-IP协议详解(10) TCP滑窗管理TCP-IP协议详解(11) TCP重传TCP-IP协议详解(12) TCP堵塞控制TCP-IP协议详解(13) DNS协议TCP-IP协议详解(14) CIDR与NATTCP-IP协议详解(15) HTTP协议概览 图解TCP-IP协议

TCP/IP入门(一)-路由、交换机
以下内容整理自 Introduction to TCP/IP 路由用来连接一个网络到另一个网络,它创建本地网络,通过NAT实现本地网络和公网的通讯,同时通过防火墙限制外网对本地网络的访问。路由只和IP地址打交道,所以只在网络层工作。为了同时和局域网、公网交互,它有两个MAC地址。在TCP/IP网络协议下,IP地址用来唯一标示每台主机,它是由路由分配的虚拟地址,一般来说IP地址由运行在路由中的DHCP服务管理和分配,常见的表现形式是点分十进制的IPv4。当一个主机连接到路由创建的内网时,他会主动的从路由获取IP地址,这样才能确定其身份并和内网的其它设备通讯。我们来一步一步看下过程。在分配之前主机的IP地址为0.0.0.0,此时主机和路由通过网线连接着 。网线或WIFI天线的终端都和物理层PHY相连 ,PHY是个收发器,一方面负责生成信号通过网线传输出去,另一方面也接受其它网络发来的信号并解码。在这里先忽略MAC地址的作用,注意目标IP地址是255.255.255.255,表明是广播。当路由收到这个数据包(Packet),发现是群发,所以它得看看,发现是需要分配IP地址,正好是路由负责的活,准确的说是运行在路由中的DHCP负责的活,它会为此分配一个新IP地址。如上所说,这个请求其它主机也能收到,但它们没有提供IP地址的功能,就直接把数据包丢弃,对上层来说好像从来没收到过。因为此时请求方还不知道自己的新IP地址,所以目标IP就不能写路由刚提供的,主机每时每刻都会收到很多数据包,如果目标IP地址不是自己,根本没必要处理,所以除了广播,那些非自己IP的数据包都会被过滤掉,所以路由只能同样以广播的形式返回数据包,即目的IP地址是255.255.255.255,其中MAC地址发挥的作用我们到交换机再说。主机在收到这个广播后,发现内容就是对请求IP地址的回复,正是自己等待的。主机用消息中的IP地址来配置自己的网络接口,现在有了身份,可以和网络的其它成员通讯了在谈交换机之前先介绍一下MAC(Media Access Controller)。MAC负责生成发送或接受网络帧(Frame),如果收到的网络帧没有MAC地址或不是MAC广播地址,是不会传给上层处理的。交换机有个MAC(Media Access Controller),但交换机自己并没有MAC地址,因为它并不是数据通讯的终点,所以不需要MAC地址,而路由有两个MAC地址,一个在内网使用,一个在外网使用。大部分家庭和小型办公网络可以使用内置交换机的路由,与路由使用IP地址来寻找主机不一样,交换机根据主机的MAC地址来过滤和转发帧。需要强调的是,IP地址是虚拟的、可重复的,易变的;但设备的MAC地址是真实的、全球唯一的、固定的。MAC地址是可以作为设备的唯一标识的。交换机在实际工作中使用路由表来关联MAC地址和物理端口,在上面主机获取IP地址的过程,我们只关注路由的工作,忽略了底层交换机是如何工作的,现在来具体看看路由层我们使用的是含IP地址的数据包(Packet),但交换机只处理MAC地址,要在交换机工作的这层使用,需要添加MAC地址封装成帧(Frame),与目的IP地址一样,此次添加的MAC地址也是个广播地址 (FF:FF:FF:FF:FF:FF)。当交换机接收到主机发送的帧,会在路由表记录MAC地址和物理端口的关系交换机看到这是个广播帧,就会向网内所有连接的主机发一份,路由因此收到此帧,通过DHCP服务处理,生成IP地址以广播形式回复,参考上面。当交换机收到路由回复的帧,先将路由的MAC地址和物理接口关联交换机发现此帧目标MAC地址已在表中,就仅转发到此MAC地址对应端口,其它连接的端口不会看到此帧,也就是处理此帧的主机就是发送请求IP地址的那台设备。至此在内网中,主机请求IP地址过程中,路由和交换机的工作流程算是介绍完了,下面有一个简单的示例,很好的演示了内网中两台设备的通讯过程假设内网中有一个嵌入式开发板和一台PC,它们都已连上网,有了IP地址,交换机的路由表也有了记录,如下图。根据从路由和交换机学到的内容,我们来看一下内网中TCP/IP的通讯过程因为是微软提供的培训教程,所以使用的是IE浏览器,输入开发板的IP地址下图非常形象的说明了数据封装的过程,首先消息加上源和目标IP地址封装成数据包(Packet),然后加上源和目标MAC地址封装成帧(Frame),当然这是由不同层完成的操作,而且为了简化过程在此忽略了TCP协议和ARP协议。生成的帧通过PHY被传送到交换机交换机只处理MAC地址,所以它取出此帧的MAC地址,在路由表上查目标MAC地址所对应的端口,然后转发过去即可当开发板收到帧(Frame),首先检查此帧目的MAC地址和自己是否匹配,如果匹配打开此帧再检查数据包(Packet)中的目的IP地址和自己的是否匹配,如果也匹配就打开数据包查看其中消息,主要是看端口,发现是给Web Sever的,于是将其会发给Web Sever应用处理。Web Server的回应与PC的请求类似,都是将消息一层一层封装发送,填好目的和源IP地址、MAC地址,通过PHY传送到交换机。 后面的过程与前面类似,找到对应的主机,检查MAC地址、IP地址,然后将数据送达PC的浏览器显示在屏幕上。

Linux 基础教程 29-tcpdump命令-1
在Linux中输入命令man tcpdump给出的定义如下所示:是不是感觉很懵?我们用通俗、形象、学术的表达方式来全方位描述tcpdump:常用选项如下所示:1、第一个抓包示例-i : 指定用来抓包的网络接口,这个参数在服务器有多个网卡的时候非常有效-nn : 不转换协议和端口号,当tcpdump遇到协议号或端口号,不需要将这些数字转换为对应的协议名称或端口名称,如22端口SSH端口,我们希望显示22,而非SSH-X : 将协议头和包内容原原本本的显示出来,tcpdump会同时以16进制和ASCII的形式进行显示,在协议分析时非常好用。'port 22' : 告诉tcpdump要有选择的显示所抓到的包,在该示例中,只显示源端口或目的端口是22的数据包,其他的数据包则不显示。-c : 用来指定抓包的个数,示例设置的个数为1,则代表仅抓取一个包之后就退出不再抓包了。2、-e 增加数据链路层的头部信息通过两个命令的输出对比,可以看到增加-e选项后,输出的结果中增加MAC地址信息。而且在输出内容中会有oui Unknown,OUI即Organizationally unique identifier(组织唯一标识符),在任何一块网卡中烧录的6字节MAC地址中,前3个字节体现了OUI,其表明了网卡的制造组织,通常情况下,该标识符是唯一的。在本例中,由于没有识别出网卡的制造商,因此显示为Unknown。3、-l 将输出变为行缓冲模式-l的作用是将tcpdump的输出行为变为行缓冲方式,这样可以保证tcpdump遇到换行符,就立即将缓冲的内容输出到标准输出(stdout),方便利用管道或重定向方式进行后续处理,而不会造成延迟。在Linux的标准I/O中提供了全缓冲、行缓冲、无缓冲三种缓冲方式。标准错误是不带缓冲的,而终端设备常为行缓冲,其他默认则为全缓冲。在该例中,将tcpdump输出的内容通过管道提取第5列,可以用来查看详细的连接信息。而如果不加 -l 选项时,则只有当缓冲区全部占满时,tcpdump才会将缓冲区中的内容输出,这样就有可能导致输出不连续的,如果强行结束,则会影响下一行的完整性。4、-t 输出不加时间戳在增加选项-t选项后,时间23:48:03.193526就消失了。tcpdump默认情况下是按微秒来计时,因此最一个时间精确到了第6位。5、 -v 显示详细信息在增加-v选项后,会在输出的内容中增加tos、ttl、id、offset、协议编号、总长度等,如需要理解这些信息,就需要了解TCP/IP协议中的头的具体定义了。6、-F 指定过滤表达式所在的文件在第一个示例中,命令行增加了'port 22',而这一项就叫过滤条件,如果设置了过滤条件,则tcpdump只抓取满足过滤条件的数据包。如需要设置较为复杂的过滤条件或复用过滤条件时,这时可以将过滤条件保存为文件,然后通过-F加载该过滤文件。7、 -w 将原始数据包信息保存到文件中当我们查看保存的文件时,出现的是乱码。则代表无法直接查看,很有可能是二进制文件。那么怎么查看保存的文件了?请看下一个示例。7、 -r 从文件中读取原始数据包通过-w和-r选项即可实现抓包的录制回放功能。

有没有TCP协议操作JSON的例子或者教程
1)XML 和JSON是两种完全不同的数据表达方式。他们分别采用完全不同格式将原始数据转换成XML或者JOSN格式数据;然后再将XML或JOAN格式的数据还原为原始数据 2)Socket是用来编写TCP/IP或UDP/IP通信程序的;HTTP是使用TCP/IP的“应用层协议”,HTTP协议利用(借助于) TCP/IP 实现传输。3)XML和JSON都可以借助HTTP进行传输 一个形象的比喻:TCP/IP是由SOCKET修建公路,HTTP是公路上跑的车,XML或JSON是车装载的货物。

求TCP/IP协议完整详细视频教程(菜鸟勿扰 高手指点)
TCP/IP协议原理-42讲-电子科技大学链接:https://pan.baidu.com/s/1Jf2i7zV6kPvMLdlKzwW_bw?pwd=837r 提取码:837rTCP/IP协议原理-42讲-电子科技大学百度网盘
我上网查了一下, 你看看这个是不是你需要的

本文由 在线网速测试 整理编辑,转载请注明出处。