gk-auto 发表于 2021-2-12 20:59:47

以太网接口TCP/IP协议介绍,说的很容易懂了

TCP/IP协议,或称为TCP/IP协议栈,或互联网协议系列。TCP/IP协议栈(按TCP/IP参考模型划分)https://p1-tt.byteimg.com/origin/pgc-image/d073c29b03984e3aa025b70cd50cc493?from=pc

包含了一系列构成互联网基础的网络协议。这些协议最早发源于美国国防部的DARPA互联网项目。TCP/IP字面上代表了两个协议:TCP传输控制协议和IP互联网协议。时间回放到1983年1月1日,在这天,互联网的前身Arpanet中,TCP/IP协议取代了旧的网络核心协议NCP(Network Core Protocol),从而成为今天的互联网的基石。最早的的TCP/IP由Vinton Cerf和Robert Kahn两位开发,慢慢地通过竞争战胜了其它一些网络协议的方案,比如国际标准化组织ISO的OSI模型。TCP/IP的蓬勃发展发生在上世纪的90年代中期。当时一些重要而可靠的工具的出世,例如页面描述语言HTML和浏览器Mosaic,导致了互联网应用的飞速发展。随着互联网的发展,目前流行的IPv4协议(IP Version 4,IP版本四)已经接近它的功能上限。IPv4最致命的两个缺陷在与:
[*]地址只有32位,IP地址空间有限;
[*]不支持服务等级(Quality of Service, Qos)的想法,无法管理带宽和优先级,故而不能很好的支持现今越来越多的实时的语音和视频应用。因此IPv6 (IP Version 6, IP版本六) 浮出海面,用以取代IPv4。
TCP/IP成功的另一个因素在与对为数众多的底层协议的支持。这些底层协议对应与OSI模型 中的第一层(物理层)和第二层(数据链路层)。每层的所有协议几乎都有一半数量的支持TCP/IP,例如: 以太网(Ethernet),令牌环(Token Ring),光纤数据分布接口(FDDI),端对端协议( PPP),X.25,帧中继(Frame Relay),ATM,Sonet, SDH等。分享一个在腾讯课堂上tcp/ip的训练营的视频。主要内容:
1. 如何实现单机百万连接;
2. 如何优化三次握手、四次挥手;
3. 如何优化TCP的传输速率;
4. nginx零拷贝技术的实现;
5. epoll原理剖析和面试必问的问题。https://p3-tt.byteimg.com/origin/pgc-image/331cb102879446778c65967263f0e682?from=pc

需要了解学习的朋友可以后台私信【tcp/ip】获取链接及文档资料https://p6-tt.byteimg.com/origin/pgc-image/b932410811b44a848a3cd3aa80db661b?from=pc

3、协议拆封https://p1-tt.byteimg.com/origin/pgc-image/fc819eee590640f7825b2e8fb9a33d35?from=pc

目录 TCP/IP协议栈组成整个通信网络的任务,可以划分成不同的功能块,即抽象成所谓的 ” 层” 。用于互联网的协议可以比照TCP/IP参考模型进行分类。TCP/IP协议栈起始于第三层协议IP(互联网协议) 。所有这些协议都在相应的RFC文档中讨论及标准化。重要的协议在相应的RFC文档中均标记了状态: “必须“ (required) ,“推荐“ (recommended) ,“可选“ (elective) 。其它的协议还可能有“ 试验“(experimental) 或“ 历史“(historic) 的状态。
必须协议所有的TCP/IP应用都必须实现IP和ICMP。对于一个路由器(router) 而言,有这两个协议就可以运作了,虽然从应用的角度来看,这样一个路由器 意义不大。实际的路由器一般还需要运行许多“推荐“使用的协议,以及一些其它的协议。在几乎所有连接到互联网上的计算机上都存在的IPv4 协议出生在1981年,今天的版本和最早的版本并没有多少改变。升级版IPv6 的工作始于1995年,目的在与取代IPv4。ICMP 协议主要用于收集有关网络的信息查找错误等工作。
推荐协议每一个应用层(TCP/IP参考模型 的最高层) 一般都会使用到两个传输层协议之一: 面向连接的TCP传输控制协议和无连接的包传输的UDP用户数据报文协议 。 其它的一些推荐协议有:
[*]TELNET (Teletype over the Network, 网络电传) ,通过一个终端(terminal)登陆到网络(运行在TCP协议上)。
[*]FTP (File Transfer Protocol, 文件传输协议) ,由名知义(运行在TCP协议上) 。
[*]SMTP (Simple Mail Transfer Protocol,简单邮件传输协议) ,用来发送电子邮件(运行在TCP协议上) 。
[*]DNS (Domain Name Service,域名服务) ,用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上) 。
[*]ECHO (Echo Protocol, 回复协议) ,用于查错及测量应答时间(运行在TCP和UDP协议上) 。
[*]NTP (Network Time Protocol,网络时间协议) ,用于网络同步(运行在UDP协议上) 。
[*]SNMP (Simple Network Management Protocol, 简单网络管理协议) ,用于网络信息的收集和网络管理。
[*]BOOTP (Boot Protocol,启动协议) ,应用于无盘设备(运行在UDP协议上)。

可选协议最常用的一些有
[*]支持万维网WWW的超文本传输协议HTTP,
[*]动态配置IP地址的DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),
[*]收邮件用的POP3 (Post Office Protocol, version 3, 邮局协议) ,
[*]用于加密安全登陆用的SSH (Secure Shell,用于替代安全性差的TELNET) ,
[*]用于动态解析以太网硬件地址的ARP (Address Resolution Protocol,地址解析协议) 。

范例: 不同计算机运行的不同协议
[*]一个简单的路由器上可能会实现ARP, IP, ICMP, UDP, SNMP, RIP。
[*]WWW用户端使用ARP, IP, ICMP, UDP, TCP, DNS, HTTP, FTP。
[*]一台用户电脑上还会运行如TELNET, SMTP, POP3, SNMP, ECHO, DHCP, SSH, NTP。
[*]无盘设备可能会在固件比如ROM中实现了ARP, IP, ICMP, UDP, BOOT, TFTP (均为面向数据报的协议,实现起来相对简单)。
TCP/IP基础讲座-1:1层,2层,3层?读过关于网络的课程的,都知道ISO-OSI 7层协议这个名词,许多书籍都会具体的画出呢幅图,然后标注上物理层,数据链路层,网络层等等.背的大家要死.但是却又不知道具体这些层次干吗用的了?其实在互联网中,由于实际使用的是TCP/IP模型,也就是DOD模型(现在不知道没关系,后面会说).所以7层模型在现实网络环境中只是一个理论上,学究派的东西.这个模型中,我们真正关心的是下面的3层.1.物理层 .哦.是的.这个名词还算容易了解.网卡还有那些网线构成了这一层.那些在网线中传播的二进制数据流是这层的具体表象.也就是说,这一层上面没有什么协议(不是很精确的说法,但是你可以这么理解).有的都是电流而已.我们把两台机器用网线连起来.或者用HUB把机器都连起来,这些工作就是物理层的工作.有2个设备属于物理层的,一个是中继器,一个是HUB.大家知道.物理上面的连线距离一长就会产生电信号的衰减.为了重新加强这个信号,我们就需要在一定距离之后加上一个信号放大器,这就是中继器(repeater)恩...这个比较容易理解.repeater就是连接在2根网线之间的么.没有做任何处理.所以只是一个物理设备.属于1层的.那么集线器(HUB) 呢?这个怎么会是在1层???似乎非常难以理解.当我说出HUB的本质,大家就能够清楚了解了HUB的本质其实只是一个多口中继器(MULTI PORT REPEATER) .啊...这样大家能够理解了.HUB不叫多口中继器其实只是为了销售上面的策略.它的本质就是连接多根网线的一个物理设备.也是不对经过的电信号做任何逻辑处理的.2.数据链路层哦~这个名词有些别扭了.DATA LINK层.英文似乎更加容易理解.这个层面上面的东西不再是电信号了.而是DATA了.对,既然是DATA就有了逻辑关系了.这个层面上面的基本单位是帧(Frame) .这层和物理层的接触是最紧密的.它是把从网线上面传输的电流转换成0和1的组合.物理层只是网卡对网线发出或者接受各种电平信号,那就是说物理层是无法判别电流的来源和目标的.那么把电流打成0和1的帧之后.里面就有逻辑数据了.有了数据,就可以判别数据从何而来,到何处去.所以也就可以真正的形成LINK.既然可以判别地址,那么地址是按照什么来判别的呢?那就是最重要的概念之一:MAC地址大家肯定都听说过我们的网卡都有MAC地址有些人可能也知道MAC地址都是唯一的.对.MAC地址是全球唯一的.也就是说你的网卡虽然便宜.但是它也是世界上独一无二的.有些人说他可以改MAC.那就不是唯一了.对.虽然可以更改,那只是欺骗上层对封包里面的MAC地址进行改写.你网卡真正的MAC地址是固化的.无法修改的.我们有了MAC地址了.这样就可以有针对性对所有连接在一起的计算机进行通讯了.是的.我们终于可以在一个局域网内通讯了.但是有个问题我们前面没有提到.就是既然物理层传输的是电信号.那么如果我有2台机器一起发电信号,信号岂不是混乱了么?非常正确.这个问题在网络里面成为"碰撞",所以协议里面规定了如果你需要往外发数据,一定需要先看看电缆里面有没有别的信号.如果没有,那就可以发.如果2者同时发送,检测到碰撞之后2者分别等待一个随机时间,然后重复.这个就是重要的"碰撞检测 ".哈.看来问题解决了.不是么.现在整个网络可以正常运行了.确实如此.但是如果连接在网络上的计算机越来越多,那么碰撞的现象会越来越频繁.这样效率一定很低了.恩.这里还有一个重要概念"冲突域 ".在同一个物理上连接的网络上的所有设备是属于同一个冲突域的.接着就需要引入我们的2层设备来分割冲突域了.网桥(Bridge) 就是连接2个不同的物理网络的.主要功能是在2个网络之间转发Frame.因为从实际中我们可以知道.其实很多时候并非整个网络都在相互通讯.最多相互通讯的一组计算机我们可以分在一个小的冲突域内.这样分割以后可以减少冲突域,也就相对的减少了冲突的机会.而之间使用网桥来桥接,由于网桥两边的通讯不是非常频繁,所以使用网桥来为2边作为"代言人".这样任意一个小网络里面产生冲突的机会就少了.交换机(Switch)是我们最熟悉的设备了,交换机的本质其实就是一个多口网桥(Multi port Bridge) .同理可得.交换机的每个口后面都是一个冲突域.我们都说交换机比HUB快,就是因为交换机分割了所有的冲突域.由于现在交换机非常便宜.所以一般我们都是直接在交换机的口上接计算机.这样每台计算机都是一个独立的冲突域.这样碰撞的问题就没有了.所以速度是比HUB快.而前面说过.2层设备主要是个转发的功能.交换机的主要功能就是转发包.而不是让所有的冲突域直接物理连接.所以交换机有CPU,有内存,可以对frame进行处理等等.这些也是交换机和HUB的区别.3.网络层我们前面的一些技术就可以构建出局域网了.有了网络层以后.数据才能够真正的在整个世界间传送由于伦纳德?博萨卡(Leonard Bosack)和姗蒂?雷纳(Sandy Lerner)为了解决他们之间的通信问题(关于路由器发明的版本有很多.你听到的别的说法可能比这个说法更准确,但是谁知道呢.呵呵).路由器被发明用来解决"信息孤岛"问题.而且如果是由SWITCH来构建整个网络,那么整个网络将会有"中心节点",这样也不符合ARPANET的初衷.所以我们有了这一层.(这样说可能会感觉本末倒置,但是先这么理解吧.)这一层的基本单元是包(Packet) .所有的包都有一个IP头.啊.听起来很熟悉不是么.IP就是用来在这层上面标识包的来源和目的地址的.这层的一个主要概念就是"路由 ",也就是和switch一样,把包转发到其他的地方.不过有个不同的地方,switch只有知道具体的MAC在哪里的情况下才能够发送给指定的计算机,而路由则不需要知道最终IP所在的计算机在哪个位置,只要知道哪个途径可以过去就可以工作.这3层构建了整个网络的基础.由于TCP/IP模型将最下面2层合并成为一层,所以在TCP/IP里面总共这2层也是整个构架最基础的内容.而网络方面要做的工作也都是针对于这2层做的.2: TCP/IP.真实世界的模型上一讲里面我们说过OSI 7层模型只是一个理论模型,而实际中只需要保证7层的功能能够实现,实际分层无需按照7层来分.而且如果真的分7层.那么数据处理的速度便要慢许多.在实际应用中.使用最多的便是DoD模型.也成为TCP/IP协议簇DoD模型(Department Of Defanse Model 美国国防部模型) 顾名思义,是美国国防部设计的一个网络模型.最早用于ARPANET.这些话可能在许多教材的第一章就会讲了.但是一般教材对于DoD模型与OSI模型对应关系都没有讲到.或者很多是模糊或者错误的.在这里我就要描述一下2者对应关系.OSI模型有7层我们已经知道了,而DoD模型则只有4层.下面是对应关系OSI DoD7.Application ┐6.Presentation |-> 4. Application/Process5.Session ┘4.Transport ---> 3. Host to Host3.Network ---> 2. Internet2.Data Link ┬-> 1. Network Access1.Physical ┘由于我不会制表符.所以图有些难看.其实就是OSI的1.2层对应DoD的第1层OSI的5.6.7对应DoD的第4层其实这个还是比较容易记忆的由于物理层和数据链路层非常密切.所以分为一个.然后上面依次对应,最上面的一大块称为应用层(处理层)现在我们有了一个可用的实际模型了.不过一般我们在描述某个设备或者协议的时候.还是会使用OSI的模型,比如我们在讨论SWITCH的时候,就会说它是一个2层的设备.而路由器是一个3层的设备,还会有一些特殊的设备,比如3层交换机,4层交换机.这些都是使用OSI模型进行分类的.这点大家不要搞混淆了.我们一直听说TCP或者UDP.还有什么SMTP.POP3.这些协议到底是在哪一层定义的呢?接下来的一张图会给大家一个非常清晰的概念了(不能算是图拉 :D ).4. APPLICATIONHTTP,FTP,telnet,SNMP,SMTP,POP3,DNS 等等3.Host to HostTCP,UDP2.internetICMP,ARP,RARP,IP1.Network AccessEthernet,FastEthernet,Token Ring 等等恩...这下清楚了.让我们从下至上来看看首先是最下层的.包括了以太网,快速以太网,还有现在的千M以太网等等的协议,这些协议规定了线缆的绞数.连接方式等等物理层的东西.还有底层使用MAC通讯的方式等等.接下来是IP.ARP这些.IP在OSI模型的时候也说过.通过IP地址.我们在转发包的时候无需知道具体目标机的位置.而路由器自然会根据路由表来转发.最后一站一站的慢慢传递.达到最终目标.而ARP协议就是在IP和MAC之间转换用的.我在上一章提过,由于有了路由器,IP,整个网络才真正能够覆盖全球.所以这一层叫做internet大家也应该容易记忆了.WOW.TCP,UDP是我们听说最多的了.他是属于控制网络连接的.在OSI称为Transport.传输层.在DoD内是Host to Host 端对端.意思其实是一样的.就是在在2台计算机之间构建出一个虚拟的通讯通道来.最上面一层就无穷无尽了.所有的最终应用层的东西都在这里,你甚至可以定义你自己的协议类型.这些都是完全可以的.因为本身这一层就是提供给开发人员自行发挥的.只是上面列举的都经过标准化了.TCP包头结构源端口 16位目标端口 16位序列号 32位回应序号 32位TCP头长度 4位reserved 6位控制代码 6位窗口大小 16位偏移量 16位校验和 16位选项 32位(可选)这样我们得出了TCP包头的最小大小.就是20字节.UDP包头结构源端口 16位目的端口 16位长度 16位校验和 16位恩...UDP的包小很多.确实如此.因为UDP是非可靠连接.设计初衷就是尽可能快的将数据包发送出去.所以UDP协议显得非常精简.有一个问题,似乎这些头里面怎么没有IP地址啊.没有IP地址这些包往哪里发送呢?对.你观察的很仔细.TCP和UDP的头里面确实没有任何IP信息.我们回头想一下TCP和UDP是属于DoD的哪一层的? 对了!是第3层. 而IP则位于模型的第二层.也就是他们两者虽然有联系.但是不属于同一层.模型的一个重要规则就是.当发送端发送一个数据,上一层将数据传往下一层的时候.上一层的包就成为了下一层包的数据部分.而到接受端接受到数据.下一层将本层的头部信息去掉后交给上一层去处理.那么我们来看看实际例子:假使我们通过SMTP协议发送数据AAA到另外一段.那么数据先会被加上SMTP的头.成为AAA.往下发送到TCP层.成为AAA.再往下送到internet层AAA.然后成为AAA这样通过enternet或者FastEnternet发送到路由器.路由器得到后替换自己的MAC地址上去.传到下一级的路由器.这样经过长途跋涉.最终这个数据流到达目标机.目标机先从下面一层开始.去掉MAC,成为AAA往上到IP层,恩,比对后是发送给我这个IP的.去掉,成为AAA.TCP接到了查看校验和,没错.往上AAA.最后SMTP协议去解释.得到了AAA.万里长征终于结束.我们也将AAA发送到了目标机.大家也应该明白了为何TCP包头和UDP包头里面没有IP地址那?因为IP位于他们下面一层.TCP和UDP的包头信息是作为IP包的数据段来传送的.IP层可不管那许多.他只管他那层的协议,也就是管把从上面层来的数据加上自己的头,传到下面一层.把从下面一层来的数据去掉头.传到上面一层.每层都是这么干的.完美的契合完成了数据包的最终旅程.TCP/IP的通讯协议  这部分简要介绍一下TCP/IP的内部结构。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。TCP/IP整体构架概述  TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:  应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。  传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。  互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网络协议(IP)。  网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。TCP/IP中的协议  以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的:  1. IP  网络协议IP是TCP/IP的心脏,也是网络层中最重要的协议。  IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。  高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫做IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。  2. TCP  如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。  TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。  面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。  3.UDP  UDP与TCP位于同一层,但对于数据包的顺序错误或重复。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。  欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。  4.ICMP  ICMP与IP位于同一层,它被用来传送IP的可控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。  5. TCP和UDP的端口结构  TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。  两个系统间的多种Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:  源IP地址  发送包的IP地址。  目的IP地址 接收包的IP地址。  源端口   源系统上的连接的端口。  目的端口  目的系统上的连接的端口。  端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。

东海太阳 发表于 2021-2-12 20:59:48

感谢楼主无私分享!

十文 发表于 2021-2-13 00:25:33

无私奉献,好工控人,32个赞送给你!!

wangzhaolost 发表于 2025-11-12 11:02:29

楼主太会说了,字字句句都在理~

52gkket 发表于 2025-11-12 11:31:33

打卡路过,支持优质原创内容~

usha1707 发表于 2025-11-12 12:07:13

这波反向操作,我属实没想到!

chxkdy001 发表于 2025-11-13 10:55:40

理性围观,感觉大家说的都有道理~

奇迹685 发表于 2025-11-13 12:55:32

同款经历!我当初也这么过来的😂

liqiang 发表于 2025-11-13 13:12:47

来凑个热闹,增加点人气~

尼奥普兰 发表于 2025-11-15 05:19:17

赞同 + 10086,完全说出了我的想法!
页: [1] 2
查看完整版本: 以太网接口TCP/IP协议介绍,说的很容易懂了