关于tcp-ip:Initial-connection超时接口无法正常请求Status-canceled

问题形容最近上了一版需要,其中有一个接口因为后端的计算量超级微小,导致接口工夫要达到七八秒能力返回对应后果。 上了生产环境当前,申请总是失败。 测试环境是好好的...查看控制台申请发送的报文相干信息如下: 笔者看一下报文,发现申请的状态从开始的pending期待到最初的canceled勾销。 点开申请的Timing面板查看,发现申请卡在Connection Star的Initial connection中央不往下走了。 Initial connection是建设TCP连贯的意思,笔者不禁考虑,为啥好好的申请,TCP连贯连不上了啊,也是一脸懵。 于是,笔者去百度如何解决Initial connection过慢失败问题,发现网上的帖子七嘴八舌,如:可能是一个域名下挂着两个ip、如:可能是域名解析DNS问题之类的等... 与此同时,后端共事也在看如何优化本人的接口,让接口返回疾速一些... 前后端就这样各自钻研了一下午。 解决方案其实一开始方向就错了,不应该看Initial connection超时就认为是什么环境域名导致TCP连贯不上(公司测试环境是ip生产环境是域名),导致TCP连贯不上的起因有很多。 其中有一点就是前端限度了超时工夫,导致了TCP没工夫去进行连贯、去进行三次握手四次挥手,所以最终的解决方案是: 前端放开超时工夫axios中的timeout超时工夫限度 既然这个申请会达到七八秒,那么这个就将超时工夫设置为16秒,这样的话,工夫足够用了。 import axios from "axios";const http = axios.create({ timeout: 16000 // 给予接口足够的工夫})这样设置当前,发现,问题解决 第一张图是失败的超时勾销的申请,再附上一张胜利的不超时的申请

January 8, 2023 · 1 min · jiezi

关于tcp-ip:什么是TorTor浏览器更新有什么用

前言:Tor我的项目团队近日发表,公布Tor浏览器11.5版本。Tor被美国国家安全局(NSA)誉为“互联网匿名零碎之王“。Tor ( The Onion Router)零碎就是洋葱路由技术的具体实现。 Tor我的项目团队公布Tor浏览器11.5版本,而此次更新1.帮忙用户主动绕过互联网审查2.HTTPS 默认开启3.对网络设置菜单进行了重大改良。说起TOR浏览器都略有耳闻,那么Tor是什么样的技术原理?到底要如何利用?一、什么是Tor现在互联网曾经是咱们最罕用的交流平台,所有痕迹在互联网上都有迹可循。为了拆穿上网时的个人信息与身份,爱护个人隐私和平安,各种网络匿名冲浪技术应运而生,而洋葱路由(Onion Routing)技术和Tor ( The OnionRouter)零碎则在它们当中怀才不遇,并被美国国家安全局(NSA)誉为“互联网匿名零碎之王”。 要晓得,电脑可能上网是以互联网编号调配机构(IANA,Internet Assigned Numbers Authority)调配的IP地址为前提,互联网的IP数据包由包头和数据载荷组成。数据载荷可经加密以防被第三方窥视,但包头蕴含发送方和接管方的IP地址、数据载荷长度、发送工夫等信息,如果网站手动攻打用户的上网地点、拜访网站、身份背景以及通联关系可能会被盗取。洋葱路由( Onion Routing)技术综合使用了随机多跳路由、多层封包、多重加密等技术手段,能够实现牢靠的在线匿名。1996年Reed,M.G.P.F. Syverson,和D. M. Goldschlag提出的匿名通信算法,基本原理等同于Chaum,D. L.的 Mix 匿名通信算法,随后由美国海军提出的和孵化的,它的初衷是爱护政府通信以及为情报界和军队的网络流动提供匿名掩护和身份爱护。洋葱头路由的目标是为基于TCP的利用提供低提早的匿名通信服务,如web拜访,即时通信等。洋葱头路由算法基于通道(Circuit)实现数据报文的路由和传输。算法在网络中通过若干个节点建设通道,通过通道传输后续的用户数据。 Tor ( The Onion Router)零碎就是洋葱路由技术的具体实现。Tor Project公司开发的Tor软件—Tor Project、一些大学和机构提供的一组外围Tor路由器与寰球志愿者提供的数以千计的Tor路由器,独特组成了一个收费、开源的互联网匿名零碎—Tor。Tor目前以参与者意愿提供中继节点的形式宽泛地部署在Internet 中,是Internet中最胜利的公共匿名通信服务。Tor的设计引入完满的前向秘密(perfectforwarsecrecy、拥塞管制(congestiopcontro)、口亟服务(directory service)、完整性校验(gintesrity checking)。可配置的进口策略(configurable exit policies)和端到端完整性校验等机制,解决了第一代洋葱头路由匿名通信零碎设计的种种问题。Tor有两种实体,别离是Tor用户(Tor user)和Tor节点(Tor node)。Tor节点提供中继服务,是Tor 网络的主体。Tor用户在零碎中运行本地代理Onion Proxy (OP)程序,该程序抉择中继节点,通过中继节点建设通道,接管利用TCP数据流,并将该数据流通过已建设通道传输。每个Tor 节点都具备一组身份秘钥(identitykey)和-一组洋葱头秘钥(onion key)。身份秘钥用来签订Tor 节点的路由描述符。路由描述符是一个汇合,包含该节点的洋葱头秘钥、地址、带宽、进口机制等,注册在目录服务中。洋葱头秘钥用来建设传输通道以及协商传输的会话秘钥。 二、Tor利用的双面性任何技术都是双面性的,Tor提供了爱护用户隐衷的匿名通信服务。通过Tor网络传输的用户通信,既有合理合法的用户行为,也有滥用的行为。因为Tor网络的机制是进口节点代表用户拜访最终的目标服务,因而当呈现滥用行为时,目标服务看到的是进口节点发动的歹意行为,其间接后果往往是目标服务阻止进口节点拜访,从而使所有通过该进口节点拜访同样目标服务的通信都被阻止。Tor网络中局部传输流量的内容为不平安的利用协定,如Telnet、POP3 等。因而局部歹意Tor节点,当其作为传输通道的进口节点时,则运行相应的记录程序,对传输的敏感数据进行记录。如记录的Telnet或 POP3协定中明码传输的用户名和口令,并用作商业的用处,发售给相干的公司和机构。当初国内一些科技公司开发了检测IP代理的软件,用来检测Tor连贯,避免欺诈、增强流量过滤、防止虚伪账号注册等问题。 三、对于Tor浏览器11.5版本本次Tor的更新是对于三大方面:1.主动绕过互联网审查(Auto block bypassing) 2.HTTPS 默认开启(HTTPS on by default)版本11.5 中的另一个重要新性能是将“HTTPS 模式”设为默认浏览模式,以便通过隧道进行连贯。这确保了用户和托管网站的服务器之间的所有数据交换都将被加密,以进攻中间人 (MitM) 攻打并爱护用户免受歹意进口中继的 SSL剥离。3. 网络设置菜单更改为“连贯设置“(Better settings)Tor 浏览器 11.5 的第三个重大改良是对网络设置菜单进行了重大改良,当初称为“连贯设置”,它应该更容易找到和了解特定设置。最值得注意的是,桥接配置和连贯选项曾经过从新设计,以实现疾速轻松的审查和治理。在保留的桥上应用表情符号,新界面首次提供了配置的可视化,便于辨认正确的桥并在须要时方面快捷的抉择它。  现在TORDE 的用户数曾经超过十万,如军事、情报机构、记者等以及超过75个国家的6011个继电器提供在线匿名和隐衷爱护。           

July 27, 2022 · 1 min · jiezi

关于tcp-ip:关于TCPIP协议漏洞的安全措施

摘要:上篇咱们介绍了TCP/IP协定中常见的破绽类型包含ARP病毒攻打、基于RIP的攻打、DNS坑骗、TCP连贯坑骗。面对TCP/IP协定中存在的破绽咱们要采取什么样的安全措施去预防和解决呢?首先从架构角度来说:IPSec与TLS最罕用的两种平安架构,能够利IPSec、TLS平安架构在不同的协定层来爱护数据传输的安全性。一、IPSecIPSec 是一组用来在网络层进步数据包传输平安的协定族统称,它通过在原有的IP报文中退出一些特定的检测头来达到平安确认的目标。IPSec有两种工作模式,别离是传输模式和隧道模式,前者实用于端到端(End to End),即两台主机之间的 IPSec 通信,后者实用于站点到站点(Site to Site),即两个网关之间的 IPSec 通信,IPSec 由 AH 协定、ESP协定和一些简单的平安验证算法组成,这些根本的算法为IPSec中的协定服务。咱们次要介绍AH和ESP两个协定:(1)AH协定提供的平安服务AH 的工作模式是在每一个数据包中的 IP 报头后增加一个 AH 头,这个 AH 头有本人独特的字段用于提供平安服务,AH 能够保证数据的完整性不被篡改,但不能避免数据被偷盗。AH 应用的 IP 协定号是 51,当IP报文的协定号局部为51 时,代表IP头前面是一个 AH 报头。AH提供的平安服务次要有数据源认证,退出一个单方协商好的密文,来对对方身份以及数据的有效性进行验证;第二个是数据完整性校验,因为AH协定须要避免数据被非法篡改,因而该协定会通过引入一个单向Hash函数来创立一个散列值或者摘要信息,将该散列值与文本联合向接管方传输,同时接受方用同样的单向Hash函数对承受内容进行解密,验证后果是否统一,以此来爱护数据的完整性。第三个是防报文重放攻打,所谓重放攻打就是攻击者尽管不晓得加密过的数据包外面到底是什么,然而能够通过截取这个数据包再发给接受方从而使接管方无奈判断哪个才是正确的发送者,而AH协定会校验序列号字段中的数值是否反复过,若反复,则间接抛弃。(2)ESP 协定提供的平安服务ESP与 AH不同的是 ESP会先把数据段加密,而后再寄存到IP报文中,从而达到避免窃听的目标。ESP 除了在 IP 报头的前面会加上一个 ESP报头以外,还会在报文最初加上一个 ESP 报尾,该报尾用来提供加密服务。这样攻击者即便获取了该数据包,在没解开 ESP 加密的状况下也无奈获知其中的信息。ESP 提供的平安服务和 AH 有所重合,ESP应用序列号字段来避免重放攻打,ESP 通常应用HMAC-MD5 或 HMAC-SHA-1算法对加密后的载荷进行 Hash 计算来实现认证和保障数据完整性的性能。但因为ESP会把数据加密之后再传输,因而会提供保密性服务,在传输机密性数据的时候 ESP 有很大劣势。此外,在 NAT 模式下,因为AH会对IP地址也做Hash运算,因而在地址转换之后 AH 的 Hash 值会被毁坏,而ESP的IP协定号是50,在进行NAT转换时没有相应的 TCP或UDP端口号的概念。为了使 ESP 可能满足 NAT环境下的地址转换,这时就须要引进一个新的办法,即在ESP报文和 IP 报头之间退出一个新的UDP报头。二、TLS协定TLS 协定工作在传输层,因为TCP和UDP都有可被利用的破绽,因而它是为了解决传输层链路平安问题而呈现的。TLS 分为两种协定,别离是 TLS 记录协定和 TLS 握手协定。TLS 记录协定依据 TLS 握手协定协商的参数,对下层所交付的数据进行各种操作,从而使数据通过密文的模式传输,而接管方则通过解密的形式来承受数据。通过这种形式就能够大大增强数据传输的安全性。另一种协定是 TLS 握手协定,他让客户端和服务端进行协商,确定一组用于数据传输加密的密钥串,互相认证对方,这样当攻击者没有通过密钥认证时,就无奈与另一端进行数据通信。首先,客户端向服务端发送 ClientHello 音讯,其中含有一个客户端生成的随机数,咱们假如为R1和可供选择的版本号清单等信息。第二步,依据客户端发来的Client Hello,服务端回复 Server Hello 音讯,其中会依据客户端发来的清单数据确定两端通信将会应用的版本号,明码套件,压缩形式等等协定须要的重要信息,并产生一个服务端随机数 R2,当服务器认证时,服务器会发给客户端本人的证书。第三步,当要求客户端认证时,客户端会先发送本人的证书,同时依据之前客户端和服务器端产生的随机数专用一种算法计算出密钥。最初互相发送了 Finished 音讯后就代表握手完结,能够开始传输数据。同时也能够依据每种破绽不同的特点进行有针对性的进攻,然而一些进攻办法并不全面。一、ARP病毒攻打的常见进攻办法目前有很多针对ARP病毒攻打的进攻办法,咱们来看一下常见的进攻办法。(1)进步零碎安全性定期更新操作系统补丁,及时降级杀毒软件病毒库,并开启杀毒软件的实时监控性能,避免零碎被非法入侵或感化ARP病毒,然而这种进攻办法只能避免本机感化ARP病毒,并不能无效进攻ARP坑骗。(2)部署ARP防火墙ARP防火墙在肯定水平上能够用来帮忙缓解ARP攻打,帮助爱护局域网内主机平安。ARP防火墙除了下文行将介绍的绑定MAC地址性能外,最次要的进攻办法就是主动防御。主动防御是指ARP防火墙依照肯定频率强制对外发送正确的ARP数据包,这ARP防火墙在肯定水平上能够用来帮忙缓解ARP攻打,帮助爱护局域网内主机平安。ARP防火墙除了绑定MAC地址性能外,最次要的进攻办法就是主动防御。主动防御是指ARP防火墙依照肯定频率强制对外发送正确的ARP数据包,这显然会对网络造成额定的累赘。如果发送频率过高时,会在局域网内造成ARP风暴。而且攻击者只有进步攻击速度,使其大于ARP防火墙的主动防御速度,主动防御就会生效。(3)在交换机或主机端绑定MAC地址在交换机端绑定每台主机的IP/MAC对应关系,为每台主机增加一条动态ARP缓存条目。当交换机收到来自主机的数据包时,将数据包的IP地址和MAC地址与ARP缓存条目进行比对,如果雷同则放行数据包,否则该数据包将被抛弃。同理,在主机端也能够绑定网关的IP/MAC对应关系,为网关增加一条动态ARP缓存条目。这种进攻办法尽管能够抵挡肯定水平的ARP攻打,但会就义 Internet的移动性和主动配置性,减少了网络管理员的累赘,不适用于主机变动颊繁的局域网。二、基于RIP的攻打的常见预防办法(1) 将路由器的某些接口配置为被动接口。配置为被动接后,该接口进行向该接口所在的网络播送路由更新音讯。然而,容许持续在该接口接管路由更新播送音讯。(2) 配置ACL访问控制列表。只容许相应源IP地址的路由更新报文进入。(3) 在RIPV2中应用验证机制。RIPV1天生就有不平安因素。因为它没有应用认证机制并应用不牢靠的UDP协定进行传输。RIPv2的分组格局中蕴含了一个选项能够设置16个字符的明文明码字符串(示意可很容的被嗅探到)或者MD5签字。尽管RIP信息包能够很容易的伪造,但在RIPv2中你应用了MD5签字将会使坑骗的操作难度大大提高。(4)采纳路由器之间数据链路层PPP的验证。采纳PPP的PAP验证或Chap验证实现数据链路层的平安线路连贯。三、DNS坑骗常见预防办法(1)进行IP地址和MAC地址的绑定① 预防ARP坑骗攻打。因为DNS攻打的坑骗行为要以ARP坑骗作为开始,所以如果能无效防备或防止ARP坑骗,也就使得DNS坑骗攻打无从下手。例如能够通过将GatewayRouter的IpAddress和MACAddress动态绑定在一起,就能够防备ARP攻打坑骗。②DNS信息绑定。DNS坑骗攻打是利用变更或者假装DNS Server的IP Address,因而也能够应用MACAddress和IP Address动态绑定来进攻DNS坑骗的产生。因为每个Nctwork Card 的MAC Address具备惟一性质,所以能够把DNS Server的 MAC Address与其IPAddress绑定,而后此绑定信息存储在客户机网卡的Eprom中。当客户机每次向DNS Server 收回查问串请后,就会检测DNS Server响应的应答数据包中的MACAddress是否与Eprom存储器的 MAC Address雷同,要是不同,则很有可能该网络中的 DNS Server受到DNS坑骗攻打。这种办法有肯定的有余,因为如果局域网外部的客户主机也保留了DNS Server 的 MAC Address,依然能够用 MACAddress进行假装坑骗攻打 。(2)应用Digital Password 进行分别在不同子网的文件数据传输中,为预防窃取或篡改信息事件的产生,能够应用工作数字签名(TSIG)技术即在主从Donain Name Server中应用雷同的Password和数学模型算法,在数据通信过程中进行分别和确认。因为有Password进行校验的机制,从而使主从 Server的身份位置极难假装,增强了Domain Name信息传递的安全性。在不同子网的文件数据传输中,为预防窃取或篡改信息事件的产生,能够应用工作数字签名(TSIG)技术即在主从Donain Name Server中应用雷同的Password和数学模型算法,在数据通信过程中进行分别和确认。因为有Password进行校验的机制,从而使主从 Server的身份位置极难假装,增强了Domain Name信息传递的安全性。安全性和可靠性更好的 Domain Name Service是应用域名零碎的平安协定(Domain Name System Security,DNSSEC)),用Digital Signature的形式对搜寻中的信息源进行分辨,对 DATA的完整性施行校验。因为在设立 Domain时就会产生Password,同时要求下层的Domain Name也必须进行相干的Domain Password Signature,显然这种办法很简单,所以InterNIC域名治理截至目前尚未应用。然而就技术档次上讲,DNSSEC应该是现今最欠缺的Domain Name设立和解析的方法,对防备Domain Name坑骗攻打等安全事件是十分无效的。(3)间接应用IP地址拜访对个别信息安全等级要求非常严格的WEB站点尽量不要应用DNS进行解析。因为DNS坑骗攻打中不少是针对窃取客户的私密数据面来的,而少数用户拜访的站点并不波及这些隐衷信息,因而当拜访具备严格窃密信息的站点时,能够间接应用IP地址而无需通过DNS解析,这样所有的DNS坑骗攻打可能造成的危害就能够防止了。除此,应该做好 DNS Server的平安配置我的项目和降级DNS软件,正当限定 DNS Server进行响应的IP地址区间,敞开DNS Server的递归查问我的项目等。(4)对DNS数据包进行监测在DNS坑骗攻打中, Client会接管到至多两个 DNS的数据响应包,一个是实在的数据包,另一个是攻打数据包。坑骗攻打数据包为了抢在实在应答包之前回复给Client,它的信息数据结构与实在的数据包相比非常简略,只有应答域,而不包含受权域和附加域。因而,能够通过监测DNS响应包,遵循相应的准则和模型算法对这两种响应包进行分辨,从而防止虚伪数据包的攻打。四、TCP连贯坑骗的常见进攻办法(1)利用网络拓扑构造IP协定自身反对包过滤,当一个数据包从广域网进入局域网时,受害者能够查问源IP地址字段是否属于局域网外部地址段。如果是,则抛弃这个数据包。这种进攻办法的前提是受害者仪信赖局域网内主机。如果受害者不仅信赖局域网内主机,还通过其余协定受权。域网的主机对其进行拜访,那么就无奈利用该办法进攻来自广域网的攻击者。(2)限度仅利用IP地址进行认证的协定比方Unix零碎的Rlogin协定,它仅仅利用IP地址进行身份认证。只有主机的IP地址蕴含在信赖列表中,Rlogin协定就容许近程登录到另一主机,而不需输出明码。这样,攻击者能够利用Rlogin协定轻松地登录到受害者主机。咱们能够限度这些仅利用IP地址进行认证的协定,或对IP地址进行肯定配置或验证,通过危险画像、IP代理检测验明这些IP地址是否存在危险,进步这些协定的安全性。(3)应用加密算法或认证算法对协定进行加密或认证能够组织攻击者篡改或伪造TCP连贯中的数据。而就目前的加密技术或认证技术而言,单方须要共享一个密钥或者协商出一对射私密钥对。这就波及到通信单方必须采纳同种加密或认证伎俩,然而,加密算法或认证算法往往波及到简单的数学计算,很耗费系统资源,会使通信效率显著降落。

July 15, 2022 · 1 min · jiezi

关于tcp-ip:TCPIP协议常见漏洞类型

摘要:TCP/IP由网络层的IP协定和传输层的TCP协定组成。常见的破绽类型包含ARP病毒攻打、基于RIP的攻打、DNS坑骗、TCP 连贯坑骗。TCP/IP是TransmissionControlProtocol/InternetProtocol的简写 ,中译名为传输控制协议/因特网互联协定,又名网络通讯协定,是 lnternet 最根本的协定、Interact国际互联网络的根底。TCP/IP由网络层的IP协定和传输层的TCP协定组成。TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的规范。TCP/IP协定采纳了4层的层级构造,别离是网络接入层、网络层、传输层和应用层。每一层都呼叫它的下一层所提供的网络来实现本人的需要。 简略来讲,TCP负责发现传输的问题,一有问题就发出信号,要求从新传输,直到所有数据安全正确地传输到目的地。而IP协定规定须要给因特网的每一台电脑规定一个地址,这个地址就是IP地址。IP地址通过软件实现网络物理地址“对立”的办法。这种办法应用对立的地址格局,在对立治理下将地址调配给主机。因为TCP/IP协定是一个开放性的协定导致其在TCP/IP 协定栈中,绝大多数协定没有提供必要的平安机制,存在肯定的破绽平安问题。 TCP/IP 协定常见破绽类型ARP 病毒攻打ARP病毒攻打的工作原理是通过伪造通信单方一端的IP地址或 MAC 地址,让另一端误以为该主机为正确主机从而达到坑骗目标。当网络中源主机A想和目标主机 B 进行通信,A会先播送ARP申请报文,冀望B能收到并返回给A本人的 MAC 地址。但因为报文采纳的是播送模式,因而攻击者 C在收到A的申请报文时会将本人的IP地址伪造成B的IP地址,这在 ARP申请报文中能够很容易取得,接着攻击者C向发送带有 B 的IP地址,C的 MAC地址的返回音讯,让A误以为C就是非法的目标主机 B,从而攻击者C就达到了盗取信息的目标。基于RIP的攻打RIP 是一种基于间隔(跳数)的路由抉择协定,它的作用是计算数据包在网络中路由的最佳门路,因为RIP基于跳数且规定了最大跳数不能够超过15,因而它只实用于中小型的网络。基于RIP的攻打实际上是攻打网络中路由器的路由表。因为 RIP 是基于 UDP 协定进行传输,而 UDP 是一种不牢靠,不须要建设连贯的传输层协定。因而运行着 RIP 协定的路由器会无条件的承受任何来自网路中的报文,包含一些非法的路由表更新报文。路由器在承受这些报文时会在没有执行路由表更新命令的状况下扭转本身的路由表。从而导致该路由器的路由表错乱,甚至可能影响该路由器的邻接路由器,继而导致整个网络瘫痪,带来重大的结果。DNS坑骗DNS(Domain name resolution)又称域名解析协定,它用来将域名和 IP 地址进行互相转换,从而让用户在上网的时候能够间接输出域名而不是简短繁琐的 IP 地址。在 DNS 坑骗中,攻击者通常会先攻打 DNS 服务器并取而代之,并扭转原先 DNS 服务器中的 IP 地址和域名的映射关系。 当用户拜访相应的域名时返回的实际上是一个谬误的网页,而攻击者能够通过这个网页向用户植入病毒或间接开展攻打。DNS坑骗的伎俩分为两种,一种是篡改本地主机的 Hosts 文件,Hosts文件实现的就是 DNS 服务器的性能。例如将Hosts 文件中的一个域名对应的 IP 地址改老本机的回环地址(127.0.0.1),这样用户在拜访这个域名时就无奈达到想要的网页。另一种是DNS劫持,即劫持用户应用的DNS服务器,通常来说黑客会将本人曾经建设好的攻打网站的IP地址映射到用户常常拜访的网站的域名,而该攻打网站和原网站看上去相差无几,这样用户即便被攻打也毫不知情。TCP 连贯坑骗尽管TCP协定是一种牢靠的链路层协定,然而因为每台主机的IP地址在每次上网的时候都可能产生扭转,因而攻击者能够通过这个破绽扰乱两台主机的TCP连贯。TCP连贯坑骗中,攻击者C会始终对主机A进行攻打(例如 Dos 攻打)使其瘫痪,从而阻止A与B进行通信,而后本人再伪造成主机 A与B 建设 TCP连贯。过程如下:C→B:SYN=1,seq=a B→A:SYN=1,ACK=1,seq=b,ack=a+1 C→B:ACK=1,seq=a+1,ack=b+1 攻击者C首先向B发送连贯申请报文,同步位SYN置为1,序列号 seq为a。B收到申请报文后,向A收回确认报文,确认号 ack为 a+1,序号seq 为 b,因为A处于瘫痪中因而不会发送响应报文。C 通过网络嗅探工具失去B向A发送的 ack 和seq,对B发送确认报文,将ACK 置为1,序号 seq为 a+1,确认号 ack为 b+1。这样B和攻击者C之间就间接建设了TCP连贯,并能够间接向B发送指令,而B还认为指令是由非法主机A发送过去的,将执行这些命令。从而导致C能够任意地向B发送攻打命令,以致B瘫痪。那么面对TCP/IP协定常见破绽咱们要如何预防呢?咱们下一篇接着讲。 ...

July 13, 2022 · 1 min · jiezi

关于tcp-ip:TCPIP-协议的三次握手和四次挥手

TCP/IP 协定是传输层的一个面向连贯的安全可靠的一个传输协定,三次握手的机制是为了保障能建设一个安全可靠的连贯 三次握手那么第一次握手是由客户端发动,客户端会向服务端发送一个报文,在报文外面:SYN标记地位为1,示意发动新的连贯。当服务端收到这个报文之后就晓得客户端要和我建设一个新的连贯,于是服务端就向客户端发送一个确认音讯包,在这个音讯包外面:ack标记地位为1,示意确认客户端发动的第一次连贯申请。以上两次握手之后,对于客户端而言:曾经明确了我既能给服务端胜利发消息,也能胜利收到服务端的响应。然而对于服务端而言:两次握手是不够的,因为到目前为止,服务端只晓得一件事,客户端发给我的音讯我能收到,然而我响应给客户端的音讯,客户端能不能收到我是不晓得的。所以,还须要进行第三次握手,第三次握手就是当客户端收到服务端发送的确认响应报文之后,还要持续去给服务端进行回应,也是一个ack标记地位1的确认音讯。通过以上三次连贯,不论是客户端还是服务端,都晓得我既能给对方发送音讯,也能收到对方的响应。那么,这个连贯就被平安的建设了。 四次挥手四次挥手通常也是客户端发动的,客户端会发送一个报文,报文FIN=1,当服务端收到这个报文之后,就晓得了客户端想要和我断开连接然而此时服务端不肯定做好筹备,因为当客户端发动断开连接的报文的时候,服务端有可能还有未发送完的报文音讯须要持续发送,所以此时服务端只能通知客户端我晓得你要和我断开连接了,然而我这里可能还没做好筹备,须要等我一下,等会我会通知你于是,发完这个音讯确认报文之后,稍过片刻之后服务端持续发送一个断开连接的报文,FIN=1,表明服务端曾经做好断开连接的筹备,那么,当这个音讯发给客户端的时候,客户端同样须要持续发送一个音讯确认的报文那么通过这四次的互相沟通和连贯,我就晓得了,不论是客户端还是服务端,都曾经做好了断开的筹备 以上

June 12, 2022 · 1 min · jiezi

关于tcp-ip:网络七层结构是干啥的-看这篇文章就够了

前言“物理层、数据链路层、网络层、传输层、会话层、表示层和应用层”,明天咱们的指标就是把这些个玩意,翻译成“人话”,保障你一看就懂,一学就废~ 网络七层构造,置信是个搞计算机网络的,或者是搞软件开发的,甚至是搞互联网的,99%的人应该都晓得,最起码那也得是听过,就是下方这个玩意: (你要是听都没听过,别跟我说你是混迹于互联网界的啊~) 然而,如果让这些人讲清楚这七层构造是干嘛的,那这个比例,预计能从99%锐减到1%。 明天,就让咱们一起来把这七层构造,翻译成“人话”。 本着“有问题,找百度”的准则,我关上了百度百科,而后就发现了以下这些内容   看到这些查找进去的“答案”,置信大家跟我的感觉是一样的:“看是不可能看懂的,这辈子预计都看不懂了。。。” 想要看懂这些货色怎么办呢? 依照“失常”的思路,咱们须要解决以下问题:这七层都跟哪些内容相干?他们怎么关联起来的?协定这个玩意跟计算机是怎么联合的?操作系统是如何把IP数据包发给网卡的? 于是咱们发奋图强,理解到它大略跟应用程序、操作系统、路由器、交换机这些玩意相干,晓得协定通过一层一层的封包或者解包来传输数据。再钻研一下Linux网络实现,了解操作系统与外设的通信,两头可能还要写个驱动模块加深印象。额,等一下,晶体管是如何起到开关作用的?如同还得学学物理。。。 其实以上说的啥,我本人都不晓得,纯属一顿胡诌,哈哈哈。  但我晓得的是,这个“失常”的思路,相对是“不失常”的,置信很多人,面对生疏的常识时,都会犯这种“打破砂锅问到底”的谬误~ 宏观了解层面,考究的是“不求甚解”,只须要了解到以下这种水平即可。 翻译 整个网络当中,最根本或者是最外围的就是数据的传输,整个网络的搭建,都是为数据传输服务的,咱们类比一下快递物流的例子,就能够初步了解这七层都是干嘛的了: 1. 应用层 应用层的作用是为应用程序提供服务并规定应用程序中通信相干的细节,也就是为利用提供服务。常见的协定有 HTTP,FTP,TELNET、SMTP 等。 翻译成“人话”: 相当于收件员。当客户(利用)打电话(发动申请)给收件员(应用层)时,收件员能够依据客户的不同需要提供不同的服务(不同协定),比方隔天送达、指定工夫送达等等。 2. 表示层 表示层的作用是将利用解决的信息转换为适宜网络传输的格局,或者将来自下一层的数据转换为下层能解决的格局。它次要负责数据格式的转换。具体来说,就是将设施固有的数据格式转换为网络规范格局。常见的协定有 ASCII、SSL/TLS 等。 翻译成“人话”:  相当于打包员。如果快递(数据)太臃肿,他会在不毁坏快递的状况下压扁(压缩)它。如果客户重视安全线,全能的快递公司还能用密码箱( SSL/TLS)打包快递再快送。当然,打包员会确定,目的地快递站的拆包员,能无损地拆开包裹,将快递交给用户。3.会话层 会话层作用是负责建设和断开通信连贯,以及数据宰割等数据传输相干的治理。常见的协定有 ADSP、RPC 等。 翻译成“人话”: 相当于调度员。对快递运输进行调度指挥。例如这次客户要发100吨沙土(数据),到底是空运、陆运还是海运。而运完之后,相干信息(连贯)也能够被销毁了,这些都是他的职责。 4.传输层 传输层起着牢靠传输的作用。只在通信单方节点进行解决,而不需在路由器上解决。此层有两个具备代表性的协定:TCP 与 UDP。 翻译成“人话”:  相当于跟单员。负责任的跟单员(应用 TCP 协定)会保障快递送到客户手上,如果送不到就让公司再发一次。不负责任的跟单员(应用 UDP 协定)只管将快递送到客户指定的中央,不论快递是否送到客户手上。 5. 网络层 网络层负责将数据传输到指标地址。指标地址能够是多个网络通过路由器连贯而成的某一个地址。因而这一层次要负责寻址和路由抉择。次要由 IP、ICMP 两个协定组成。 翻译成“人话”: 相当于路线布局员。快递公司有很多集散中心(路由器),依据集散中心的状况(是否拥挤),找出一条最合适的门路将货物(数据)沿路运过来。 6. 数据链路层 该层负责物理层面上互连的节点之间的通信传输。例如与1个以太网相连的两个节点间的通信。常见的协定有 HDLC、PPP、SLIP 等。 翻译成“人话”:  相当于驾驶员。他们驾驶着汽车,将打包好的快递(数据帧)从一个城市(物理节点)运输到另一个城市。 7. 物理层 物理层负责0、1比特流(0、1序列)与电压高下、光的闪灭之间的调换。典型的协定有 RS 232C、RS 449/422/423、V.24 和 X.21、X.21bis 等。 翻译成“人话”: 相当于交通工具。例如公路、汽车和飞机等,承载货物(数据)的交通运输。 如果以上一堆文字都懒得看的话,那间接看上面这个图也行,这可是我消耗了大半天工夫消化了解的,拿着这张图,你就能够给他人去讲,网络七层构造是干嘛的啦~    1至4层被认为是低层,这些层与数据挪动密切相关。5至7层是高层,蕴含应用程序级的数据。每一层负责一项具体的工作,而后把数据传送到下一层。从上往下,每通过一层,协定就会在这个包裹下面做点手脚,加点货色,传送到接收端,再层层解套进去,如下示意图:   晓得了这些,咱们就能够来看一下“快递”的前进过程。 如果你是一个网络上的操作系统。1层和2层的网卡会接管申请并告诉你什么时候有包裹达到,驱动程序解决2层帧的进口,失去一个发亮和闪光的3层数据包。作为操作系统,你将调用一些罕用的利用程序处理3层数据。   如果你决定保留这个数据包,你将关上它,并且取出4层数据包。如果它是TCP协定,这个TCP子系统将被调用并关上这个数据包,而后把这个7层数据发送给在指标端口期待的应用程序,整个过程就完结了。   在理论过程中,七层构造执行了哪些操作呢? 要答复这个问题,咱们能够思考一下:用户输出一个网址,计算机执行了什么操作? 1. 所有的数据通信通过封装打包后,经由物理线路传送。   2. 所有的主机名都须要解析为IP地址。   3. 应用层应用HTTP协定,利用传输层面面向连贯的TCP协定。   4. WEB利用采纳客户机/服务器的工作模式。   5. 数据包通过路由器,依据路由表进行转发。   6.在每个网络外部,都要把IP地址转换成MAC地址。 ...

June 8, 2022 · 1 min · jiezi

关于tcp-ip:系列解读-SMCR-二融合-TCP-与-RDMA-的-SMCR-通信-龙蜥技术

文/龙蜥社区高性能网络SIG 一、引言通过上一篇文章 《系列解读SMC-R:通明无感晋升云上 TCP 利用网络性能(一)》咱们理解到,RDMA 绝对于 TCP 具备旁路软件协定栈、卸载网络工作到硬件的特点,能无效减少网络带宽、升高网络时延与 CPU 负载。而内核网络协议 SMC-R 在利用 RDMA 技术的同时、又进一步完满兼容了 socket 接口,可能通明无感的为 TCP 利用带来网络性能晋升。因而,龙蜥社区高性能网络 SIG 认为 SMC-R 将成为下一代数据中心内核协定的重要组成,对其进行了大量优化,并踊跃将这些优化回馈到上游 Linux 社区。 本篇文章作为 SMC-R 系列的第二篇,将聚焦一次残缺的 SMC-R 通信流程。通过具体的建连、传输、销毁过程,使读者进一步领会到 SMC-R 是一个交融了通用 TCP 与高性能 RDMA 的 "hybrid" 解决方案。 二、通信流程如前篇所述,应用 SMC-R 协定有两种办法。其一,是在应用程序中显式创立 AF_SMC 族的 socket;其二,是利用 LD_PRELOAD 或 ULP + eBPF 的形式通明的将应用程序中的 AF_INET 族 socket 替换为 AF_SMC 族 socket。咱们默认应用 SMC-R 通信的节点曾经加载了 SMC 内核模块,并通过上述形式将利用程序运行在 SMC-R 协定上。接下来,咱们以 first contact (通信两端建设首个连贯) 场景为例,介绍 SMC-R 通信流程。 2.1 确认对端能力应用 SMC-R 通信时,咱们首先须要确认对端是否同样反对 SMC-R 协定。因而,SMC-R 协定栈为应用程序创立 SMC 类型 socket (smc socket) 的同时,还会在内核创立并保护一个与之关联的 TCP 类型 socket (clcsock),并基于 clcsock 与对端建设起 TCP 连贯。(图/TCP 握手确认对端 SMC-R 能力) ...

April 22, 2022 · 5 min · jiezi

关于tcp-ip:结合中断分析TCPIP协议栈在LINUX内核中的运行时序

目录:1.Linux网络子系统的分层2.TCP/IP分层模型3.Linux 网络协议栈4.Linux 网卡收包时的中断解决问题5.Linux 网络启动的筹备工作6.Linux网络包:中断到网络层接管7.总结 【舒适提醒】文章略长,请急躁观看!Linux网络子系统的分层Linux网络子系统实现须要:l 反对不同的协定族 ( INET, INET6, UNIX, NETLINK...)l 反对不同的网络设备l 反对对立的BSD socket API须要屏蔽协定、硬件、平台(API)的差别,因此采纳分层构造: 零碎调用提供用户的应用程序拜访内核的惟一路径。协定无关接口由socket layer来实现的,其提供一组通用性能,以反对各种不同的协定。网络协议层为socket层提供具体协定接口——proto{},实现具体的协定细节。设施无关接口,提供一组通用函数供底层网络设备驱动程序应用。设施驱动与特定网卡设施相干,定义了具体的协定细节,会调配一个net_device构造,而后用其必须的例程进行初始化。 相干视频举荐手把手带你实现一个Linux内核文件系统Linux内核文件系统具体实现与内核裁剪TCP/IP协定栈深度解析丨实现单机百万连贯丨优化三次握手、四次挥手丨优化TCP的传输速率LinuxC++后盾服务器开发收费学习:C/C++Linux服务器开发/后盾架构师-学习视频 TCP/IP分层模型在TCP/IP网络分层模型里,整个协定栈被分成了物理层、链路层、网络层,传输层和应用层。物理层对应的是网卡和网线,应用层对应的是咱们常见的Nginx,FTP等等各种利用。Linux实现的是链路层、网络层和传输层这三层。在Linux内核实现中,链路层协定靠网卡驱动来实现,内核协定栈来实现网络层和传输层。内核对更下层的应用层提供socket接口来供用户过程拜访。咱们用Linux的视角来看到的TCP/IP网络分层模型应该是上面这个样子的。 首先咱们梳理一下每层模型的职责:链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据;网络层:定义IP地址,确认主机所在的网络地位,并通过IP进行MAC寻址,对外网数据包进行路由转发;传输层:定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序;应用层:定义数据格式,并依照对应的格局解读数据。 而后再把每层模型的职责串联起来,用一句通俗易懂的话讲就是:当你输出一个网址并按下回车键的时候,首先,应用层协定对该申请包做了格局定义;紧接着传输层协定加上了单方的端口号,确认了单方通信的应用程序;而后网络协议加上了单方的IP地址,确认了单方的网络地位;最初链路层协定加上了单方的MAC地址,确认了单方的物理地位,同时将数据进行分组,造成数据帧,采纳播送形式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,通过屡次转发后,最终被发送到指标主机。指标机接管到数据包后,采纳对应的协定,对帧数据进行组装,而后再通过一层一层的协定进行解析,最终被应用层的协定解析并交给服务器解决。 Linux 网络协议栈 基于TCP/IP协定栈的send/recv在应用层,传输层,网络层和链路层中具体函数调用过程曾经有很多人钻研,本文援用一张比较完善的图如下: 以上阐明根本大抵阐明了TCP/IP中TCP,UDP协定包在网络子系统中的实现流程。本文次要在链路层中,即对于网卡收报触发中断到进入网络层之间的过程探索。 【文章福利】小编举荐本人的linuxC/C++语言交换群:832218493,整顿了一些集体感觉比拟好的学习书籍、视频材料共享在外面,有须要的能够自行添加哦!~! Linux 网卡收包时的中断解决问题 中断,个别指硬件中断,多由零碎本身或与之链接的外设(如键盘、鼠标、网卡等)产生。中断首先是处理器提供的一种响应外设申请的机制,是处理器硬件反对的个性。一个外设通过产生一种电信号告诉中断控制器,中断控制器再向处理器发送相应的信号。处理器检测到了这个信号后就会打断本人以后正在做的工作,转而去解决这次中断(所以才叫中断)。当然在转去解决中断和中断返回时都有爱护现场和返回现场的操作,这里不赘述。 那软中断又是什么呢?咱们晓得在中断解决时CPU没法解决其它事物,对于网卡来说,如果每次网卡收包时中断的工夫都过长,那很可能造成丢包的可能性。当然咱们不能完全避免丢包的可能性,以太包的传输是没有100%保障的,所以网络才有协定栈,通过高层的协定来保障间断数据传输的数据完整性(比方在协定发现丢包时要求重传)。然而即便有协定保障,那咱们也不能胡作非为的应用中断,中断的工夫越短越好,尽快放开处理器,让它能够去响应下次中断甚至进行调度工作。基于这样的思考,咱们将中断分成了高低两局部,上半局部就是下面说的中断局部,须要疾速及时响应,同时须要越快完结越好。而下半局部就是实现一些能够推后执行的工作。对于网卡收包来说,网卡收到数据包,告诉内核数据包到了,中断解决将数据包存入内存这些都是急切需要实现的工作,放到上半部实现。而解析解决数据包的工作则能够放到下半部去执行。软中断就是下半部应用的一种机制,它通过软件模拟硬件中断的处理过程,然而和硬件没有关系,单纯的通过软件达到一种异步解决的形式。其它下半部的解决机制还包含tasklet,工作队列等。根据所解决的场合不同,抉择不同的机制,网卡收包个别应用软中断。对应NET_RX_SOFTIRQ这个软中断,软中断的类型如下:enum{ HI_SOFTIRQ=0, TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, IRQ_POLL_SOFTIRQ, TASKLET_SOFTIRQ, SCHED_SOFTIRQ, HRTIMER_SOFTIRQ, RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */ NR_SOFTIRQS};通过以上能够理解到,Linux中断注册显然应该包含网卡的硬中断,包解决的软中断两个步骤。 l 注册网卡中断咱们以一个具体的网卡驱动为例,比方e1000。其模块初始化函数就是:static int __init e1000_init_module(void){ int ret; pr_info("%s - version %s\n", e1000_driver_string, e1000_driver_version); pr_info("%s\n", e1000_copyright); ret = pci_register_driver(&e1000_driver);... ...

September 13, 2021 · 4 min · jiezi

关于tcp-ip:TCP缓冲区和粘包拆包有什么关系

 欢送大家搜寻“小猴子的技术笔记”关注我的公众号,支付丰盛面试材料和学习材料。 你理解TCP缓冲区吗?它和TCP传输中的粘包和拆包有什么关系呢?粘包和拆包别离产生在TCP的那个阶段呢? 先简略回顾下TCP概念:在网络传输中TCP是面向连贯的、牢靠的、双通道、字节流一对一传输。TCP单方通信必须要先建设连贯,而后调配必要的内核资源。单方替换结束数据之后必须都要断开连接用来开释系统资源,长链接能够不用断开连接复用同一个通道。那么什么是TCP的缓冲区呢? 操作系统中有两个空间:用户空间和内核空间。每一个socket连贯都是在内核空间,内核针对每一个socket都有一个发送缓冲区和接收缓冲区。TCP的双工工作模式以及流量管制就是依赖这两个缓冲区的填充来实现的。 咱们之前用socket获取“OutputStream”获取一个输入流进行字节的写出,其实是写入到了“send buffer”发送缓冲区中,这个时候数据不肯定会发送到对方机器上。“write()”办法仅仅是将用户空间数据拷贝到了内核发送缓冲区中,具体什么时候发送由TCP决定。 TCP会从发送缓冲区中把数据通过网卡发送到指标机器的内核缓冲区中。如果零碎始终没有调用"recv()"办法进行读取的话,那么数据将会始终挤压在socket的recv buffer中。 TCP 粘包、拆包问题的由来: 如果你看懂了下面这幅图的话,那么对于粘包和拆包的问题就比拟好了解了。在这里我想先问一个问题,粘包和拆包是产生在传输过程中吗? 粘包和拆包问题到底产生在什么阶段?首先咱们须要分明地理解TCP数据是牢靠的,因而必定不是传输的过程中!因为数据发送是从缓冲区->网卡,因而粘包问题是从缓冲区读取数据的时候产生的。拆包则是从缓冲区到网卡的阶段产生的。 这里先解释下粘包:所谓的粘包就是发送方在同一时刻收回了两个或者两个以上的包到接收端。 假如发送端须要发送两条数据“别缓和,你这样没事的!”和“好好看文章,你肯定能够学会”。首先会把这两条数据放到发送缓冲区中,而后在通过网卡进行数据的发送到接管方的接收缓冲区中。如果接管方没有及时从接收缓冲区中获取往外取数据,那么数据就会在缓冲区挤压,这样两条数据就会积压在一块,就成了一条数据,这就是粘包的问题! 那么什么是拆包问题呢?拆包问题是TCP每次发送的长度是有限度的,如果发送一个包的数据过大的话,TCP就会把这个包拆成两个包来进行发送。 假如要发送的数据“别缓和,你这样没事的!”很大,TCP在发送的时候把它拆成了“别缓和,你这样”和“没事的!”进行发送,那么在接管方就会收到两个报文,这就是拆包的问题。 实际上过大的话,还有可能会被拆成三个或者更多的包进行发送。然而无论被拆成几个包,TCP都可能保障发送包的程序性和正确性。 那么产生粘包和拆包的起因是什么呢?这个和TCP的缓冲区与滑块窗口、MSS/MTU限度、Nagle算法无关。 有了粘包和拆包的问题,咱们在理论的开发中应该怎么防止或者解决这个问题呢?那就是定义咱们的通信协定。这样如果粘包了就能够依据协定来辨别不同的包,如果拆包了就期待数据形成一个残缺的音讯之后在进行解决。 第一种形式---定长协定:所谓的定长协定就是指定一个报文的固定长度,每次单方依照约定截取固定的长度。假如咱们须要发送“hello”和“very”两个单词,依照约定的5个字节进行一次截取。那么有余5个字节的单词能够增加0作为补充,则产生的规定如下。 因为有余约定长度的须要进行补0,因而定长协定会造成带宽的节约。 第二种形式---特殊字符分隔符:应用特殊字符分隔符就是在报文的结尾进行追加特殊字符分隔符,用次分隔符来标注这是一个残缺的报文,例如遇到了“\n”。 这样尽管能够对报文进行划分,然而要求就是报文中不能蕴含非凡分隔符。 第三种形式---固定头长度:发送数据之前,须要先获取须要发送内容的二进制字节大小,而后在须要发送的内容后面增加一个固定长度头整数,示意音讯体二进制字节的长度。 这种形式防止了特殊字符带来的问题,是生产中能够采取的一个形式,我在之前的文章中有介绍过这样的应用办法。 其实对于java程序员来说,咱们不用过分关怀接管和发送缓冲区,须要理解其概念,因为底层曾经为咱们做了封装。明确“粘包”和“拆包”产生的过程和起因。 通过观察用户空间和内核空间的数据交互,你兴许会发现进行一次残缺的交互须要进行四次的数据拷贝,这在性能上可能会有所影响。这也就有了面试官常常问的“零拷贝”的问题,尝试着本人对本文的了解学习一下“零拷贝”,这是为前面学习Netty打下松软的根底。

March 15, 2021 · 1 min · jiezi

关于tcp-ip:TCP的三次握手和四次挥手

一图胜千言,先上图: 三次握手的过程首先由客户端发动连贯申请,客户端将本人的序列号 seq 设为 x 并发送 SYN 包给服务端,客户端进入 SYN_SENT 状态。服务端在接管到客户端发来的 SYN 包之后,由 LISTEN 状态转为 SYN_RCVD 状态,服务端将 ack 设为 x+1 (收到的序列号+1) 同时将本人的 seq 设为 y ,并将 SYN-ACK 确认包发送给客户端。客户端收到服务端的确认之后,将 ack 设为 y+1 (收到的序列号+1) 并发送 ACK 确认包给服务端,客户端进入 ESTABLISHED 状态。服务端收到客户端发来的确认包之后,也进入 ESTABLISHED 状态。TCP 进行握手初始化一个连贯的指标是:分配资源、初始化序列号(告诉 peer 对端我的初始序列号是多少)。整个握手过程能够简化为上面的交互: 1)client 端首先发送一个 SYN 包通知 Server 端我的初始序列号是 X;2)Server 端收到 SYN 包后回复给 client 一个 ACK 确认包,通知 client 说我收到了;3)接着 Server 端也须要通知 client 端本人的初始序列号,于是 Server 也发送一个 SYN 包通知 client 我的初始序列号是 Y;4)Client 收到后,回复 Server 一个 ACK 确认包说我晓得了。 ...

March 1, 2021 · 1 min · jiezi

关于tcp-ip:理论-三天两夜万字长文吃透TCPIP

思维导图思维导图如下 计算机体系网络结构分层概述这里进行概述如下 物理层物理层上传送的单位为比特,规定了网络的一些电器特定,次要负责0,1比特流与电子信号之间的转换,如果没有物理层,0,1 形成的比特流将会无奈在物理介质中流传。 链路层数据链路层,又称作为链路层,单纯的0和1是没有任何意义的,必须规定其解读形式,多少个电信号算一组,每个电信号又有什么意义,这就是数据链路层的作用,数据链路层,规定次要有三个性能,别离是封装成帧、通明传输、差错控制。将会顺次解释这三个内容。 封装成帧在一段数据的前后别离增加首部和尾部,来对帧与帧之间实现一个定界。定界如下 通明传输因为不论什么数据,所传送的都应该能在链路上传送,因而通明传输会带来一个问题,当数据中的比特组合恰好统一的时候,如果采纳不适当的措施,将会造成数据被切分。如下图所示。 这里应用字节填充法实现通明传输的问题,发送端的数据在链路层中呈现控制字符SOH或者ETO的时候,在后面增加一个转义字符ESC,如果ESC也呈现的话,这里就在ESC之前持续增加一个ESC实现本义,如下所示。 差错控制在数据传输的过程中,如果呈现失落,或者帧损坏,这里就须要差错控制来进行检测和纠正,这个协定将会在网络层中进行阐明。 MAC地址数据帧筹备好了,这里还有一个问题,计算机A和计算机B之间数据互相发送,然而谁传给谁,如何辨别,这里MAC地址便呈现了。MAC地址,连人网络的每一个计算机都会有网卡接口,每一个网卡都会有一个惟一的地址,这个地址称作为MAC地址,计算机网络之间互相传送的时候,都会应用MAC地址进行互相的传送。 网络层网络层的次要性能负责不同网络之间转发数据,实现这个性能的,为路由器。 如果你在杭州的计算机A要给纽约的计算机B通信,这里就会应用播送形式发送数据包,而后比照MAC地址,雷同的接管,不同的抛弃,很显著,这样相当的不和你,所以在网络层中,划分了子网,协定规定,如果是在同一个子网,就会应用播送的模式把数据发送给对方,如果不是在同一个子网,将会发送给网关,而后进行转发。 传输层通过网络层,A曾经发送到了B,在这里就有了传输层,传输层的次要作用,为相互通信的利用过程,提供数据传输服务,当计算机A与计算机B通信时,在传输层上,还须要指定一个端口,来给特定的应用程序,即,传输层性能是建设端口到端口的通信,相比网络层的性能是建设主机到主机的通信。 在传输层中,次要应用TCP/UDP协定。 TCP 传输控制协议,在数据传输的时候,会建设会话,同时会把须要传输的文件进行分段,提供牢靠传输和流量管制,例如下载视频,当数据较大的时,用的是TCP协定。 UDP 协定,一个数据包就能实现数据通信,也就是说不须要建设会话,不须要流量管制,同时也是不牢靠传输,例如DNS域名解析,屏幕播送,这里应用的就是UDP协定。 应用层当数据传输到了传输层的数据之后,接下来须要解读,因为互联网开放式的,应用层作用规定利用的数据格式,例如TCP协定能够传输Email,WWW,FTP等,这些协定的数据格式。例如域名的DNS,万维网的HTTP协定,电子邮件的SMTP协定等等。这些数据单元称之为报文。 TCP/IP根底具体含意TCP/IP这里指的是一些协定群,具体来说,这里指的是IP或者ICMP,TCP,UDP,FTP等,这些协定,以及HTTP等的TCP/IP协定,等等这些协定都通通称之为TCP/IP网际协议群。在互联网进行通信的时候,须要相应的网络协议,TCP/IP本来就是为互联网开发定制的协定,这里互联网协议就是TCP/IP,TCP/IP就是互联网的一些协定。这里协定如下图所示 根本工作原理TCP/IP模型有四层,别离是应用层,网际层,网络接口层,这四层,每层别离具备不同的性能,TCP/IP协定协定是一组在不同层上的多个协定的组合,每层在实现本身的状况下间接提供服务,同时也为下层提供服务其图示如下 进行封装和拆解的过程如下图 在这里,将会退出相干的数据报,以及相干的数据信息,达到传送数据的目标。 数据包在这里,指的是TCP/IP协定数据通信中的数据单位,即,数据包, 即,从最上层,一层层的封装,直到网络层,最初借由数据链路层发送的数据单元。即。数据包为一个残缺的数据单元,如果超过了MTU,这个时候,会和多个帧组合在一起,而后造成一个残缺的数据包。 数据包的分层如下 在网络传输中,数据包由两个局部组成,一个是协定所须要用的首部,另一部分是上一层传过啦的数据,首部的构造由协定的具体标准进行定义,在数据包的首部,明确表明了协定应该如何读取数据,即,看到首部,就能明确的直到该协定所须要的信息和所须要解决的数据。 传输中和TCP和UDP端口端口,英语为port,称之为连贯端口,端口,协定端口, 位于传输层的通信协议通常须要指定端口号,例如在TCP/IP协定族之下的TCP与UDP协定。在应用层中,应用主从式架构的通信协议,在每个端口上提供多路复用服务(multiplexing service)。经由公认端口号(well-known port numbers),通常能够辨认出这个连线应用的通信协议,其中具代表性的是最根底的1024个公认端口号(well-known port numbers),例如Telnet协定默认应用23端口来连线,Secure Shell协定默认应用22端口,HTTP协定默认应用80端口,HTTPS协定默认应用443端口。 源端口号源端口号个别是由零碎本人动静生成的一个从1024-65535的号码,当一台计算机A通过网络拜访计算机B时,如果它须要对方返回数据的话,它也会随机创立一个大于1023的端口,通知B返回数据时把数据送到本人的哪个端口,而后软件开始侦听这个端口,期待数据返回。而B收到数据后会读取数据包的源端口号和目标端口号,而后记录下来,当软件创立了要返回的数据后就把原来数据包中的原端口号作为目标端口号,而把本人的端口号作为原端口号,也就是说把收到的数据包中的原和目标反过来,而后再送回A,A再反复这个过程如此重复直到数据传输实现。当数据全副传输完A就把源端口释放出来,所以同一个软件每次传输数据时不肯定是同一个源端口号。 UDP UDP全称为用户数据报协定,是一个简略的面向数据报的通信协议,位于OSI模型的传输层,UDP为不牢靠传输, 具备以下几个特点 面向无连贯 UDP不须要和TCP一样在数据发送前进行三次握手进行连贯,只是数据的搬运工,不会对数据进行相干的解决。具体来说, 在发送端,应用层把数据传输为UDP协定,UDP只会给数据减少一个UDP头标识标识是UDP协定。在接收端,网络层把数据传送给传输层,不会做任何的拼接操作。性能点具备单播,多播,播送等性能。 面向报文UDP是面向报文的,既不合并,也不拆分,因而应用程序须要抉择适合的报文,进行发送。 不可靠性UDP回产生数据的失落,因为没有相干的数据的确认过程。 传输效率高因为头部开销小,传输数据的时候报文效率相当的高。 TCP当一台计算机与另一台计算机通信的时候,两台计算机须要通信畅通,并且牢靠,这样能力保障收发数据,所以就有了一个三次握手,四次挥手,实现数据的连贯。 三次握手第一次握手(SYN=1, seq=x):客户端发送一个 TCP 的 SYN 标记地位1的包,指明客户端打算连贯的服务器的端口,以及初始序号 X,保留在包头的序列号(Sequence Number)字段里。 发送结束后,客户端进入 SYN_SEND 状态。 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):服务器发回确认包(ACK)应答。即 SYN 标记位和 ACK 标记位均为1。服务器端抉择本人 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。发送结束后,服务器端进入 SYN_RCVD 状态。 ...

December 29, 2020 · 1 min · jiezi

关于tcp-ip:本文把-TCPIP-讲绝了

一、TCP/IP模型TCP/IP协定模型(Transmission Control Protocol/Internet Protocol),蕴含了一系列形成互联网根底的网络协议,是Internet的外围协定。 基于TCP/IP的参考模型将协定分成四个档次,它们别离是链路层、网络层、传输层和应用层。下图示意TCP/IP模型与OSI模型各层的对照关系。TCP/IP协定族依照档次由上到下,层层包装。最下面的是应用层,这外面有http,ftp等等咱们相熟的协定。而第二层则是传输层,驰名的TCP和UDP协定就在这个档次。第三层是网络层,IP协定就在这里,它负责对数据加上IP地址和其余的数据以确定传输的指标。第四层是数据链路层,这个档次为待传送的数据退出一个以太网协定头,并进行CRC编码,为最初的数据传输做筹备。上图分明地示意了TCP/IP协定中每个层的作用,而TCP/IP协定通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层一直地封装首部与尾部,增加一些传输的信息,确保能传输到目的地。出栈的过程,数据接管方每层一直地拆除首部与尾部,失去最终传输的数据。上图以HTTP协定为例,具体阐明。 二、数据链路层物理层负责0、1比特流与物理设施电压高下、光的闪灭之间的调换。数据链路层负责将0、1序列划分为数据帧从一个节点传输到邻近的另一个节点,这些节点是通过MAC来惟一标识的(MAC,物理地址,一个主机会有一个MAC地址)。 封装成帧: 把网络层数据报加头和尾,封装成帧,帧头中包含源MAC地址和目标MAC地址。通明传输:零比特填充、转义字符。牢靠传输: 在出错率很低的链路上很少用,然而无线链路WLAN会保障牢靠传输。过错检测(CRC):接收者检测谬误,如果发现过错,抛弃该帧。三、网络层1.IP协定 IP协定是TCP/IP协定的外围,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要留神的是,IP不是牢靠的协定,这是说,IP协定没有提供一种数据未传播当前的解决机制,这被认为是下层协定:TCP或UDP要做的事件。 1.1 IP地址 在数据链路层中咱们个别通过MAC地址来辨认不同的节点,而在IP层咱们也要有一个相似的地址标识,这就是IP地址。 32位IP地址分为网络位和地址位,这样做能够缩小路由器中路由表记录的数目,有了网络地址,就能够限定领有雷同网络地址的终端都在同一个范畴内,那么路由表只须要保护一条这个网络地址的方向,就能够找到相应的这些终端了。 A类IP地址: 0.0.0.0~127.0.0.0B类IP地址:128.0.0.1~191.255.0.0C类IP地址:192.168.0.0~239.255.255.01.2 IP协定头这里只介绍:八位的TTL字段。这个字段规定该数据包在穿过多少个路由之后才会被摈弃。某个IP数据包每穿过一个路由器,该数据包的TTL数值就会缩小1,当该数据包的TTL成为零,它就会被主动摈弃。 这个字段的最大值也就是255,也就是说一个协定包也就在路由器外面穿行255次就会被抛弃了,依据零碎的不同,这个数字也不一样,个别是32或者是64。 2.ARP及RARP协定 ARP 是依据IP地址获取MAC地址的一种协定。 ARP(地址解析)协定是一种解析协定,原本主机是齐全不晓得这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下本人的ARP高速缓存(就是一个IP-MAC地址对应表缓存)。 如果查问的IP-MAC值对不存在,那么主机就向网络发送一个ARP协定播送包,这个播送包外面就有待查问的IP地址,而间接收到这份播送的包的所有主机都会查问本人的IP地址,如果收到播送包的某一个主机发现自己符合条件,那么就筹备好一个蕴含本人的MAC地址的ARP包传送给发送ARP播送的主机。 而播送主机拿到ARP包后会更新本人的ARP缓存(就是寄存IP-MAC对应表的中央)。发送播送的主机就会用新的ARP缓存数据筹备好数据链路层的的数据包发送工作。 RARP协定的工作与此相反,不做赘述。 3.ICMP协定 IP协定并不是一个牢靠的协定,它不保证数据被送达,那么,天然的,保证数据送达的工作应该由其余的模块来实现。其中一个重要的模块就是ICMP(网络管制报文)协定。ICMP不是高层协定,而是IP层的协定。 当传送IP数据包产生谬误。比方主机不可达,路由不可达等等,ICMP协定将会把错误信息封包,而后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建设在IP层以上的协定是可能做到平安的起因。 四、pingping能够说是ICMP的最驰名的利用,是TCP/IP协定的一部分。利用“ping”命令能够查看网络是否连通,能够很好地帮忙咱们剖析和断定网络故障。 例如:当咱们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。个别的信息如下:ping这个单词源自声纳定位,而这个程序的作用也的确如此,它利用ICMP协定包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发申请,受到申请的主机则用类型码为8的ICMP回应。 五、TracerouteTraceroute是用来侦测主机到目标主机之间所经路由状况的重要工具,也是最便当的工具。 Traceroute的原理是十分十分的有意思,它收到到目标主机的IP后,首先给目标主机发送一个TTL=1的UDP数据包,而通过的第一个路由器收到这个数据包当前,就主动把TTL减1,而TTL变为0当前,路由器就把这个包给摈弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报当前再发一个TTL=2的UDP数据报给目标主机,而后刺激第二个路由器给主机发ICMP数据 报。如此往返直到达到目标主机。这样,traceroute就拿到了所有的路由器IP。 六、TCP/UDPTCP/UDP都是是传输层协定,然而两者具备不同的个性,同时也具备不同的利用场景,上面以图表的模式比照剖析。面向报文 面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因而,应用程序必须抉择适合大小的报文。若报文太长,则IP层须要分片,升高效率。若太短,会是IP太小。 面向字节流 面向字节流的话,尽管应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无构造的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就能够把它划分短一些再传送。 对于拥塞管制,流量管制,是TCP的重点,前面解说。 TCP和UDP协定的一些利用什么时候应该应用TCP? 当对网络通讯品质有要求的时候,比方:整个数据要准确无误的传递给对方,这往往用于一些要求牢靠的利用,比方HTTP、HTTPS、FTP等传输文件的协定,POP、SMTP等邮件传输的协定。 什么时候应该应用UDP? 当对网络通讯品质要求不高的时候,要求网络通讯速度能尽量的快,这时就能够应用UDP。 七、DNSDNS(Domain Name System,域名零碎),因特网上作为域名和IP地址互相映射的一个分布式数据库,可能使用户更不便的拜访互联网,而不必去记住可能被机器间接读取的IP数串。通过主机名,最终失去该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协定运行在UDP协定之上,应用端口号53。 八、TCP连贯的建设与终止1.三次握手 TCP是面向连贯的,无论哪一方向另一方发送数据之前,都必须先在单方之间建设一条连贯。在TCP/IP协定中,TCP协定提供牢靠的连贯服务,连贯是通过三次握手进行初始化的。三次握手的目标是同步连贯单方的序列号和确认号并替换 TCP窗口大小信息。 第一次握手:建设连贯。客户端发送连贯申请报文段,将SYN地位为1,Sequence Number为x;而后,客户端进入SYN_SEND状态,期待服务器的确认;第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,须要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,本人本人还要发送SYN申请信息,将SYN地位为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK报文段。而后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送结束当前,客户端和服务器端都进入ESTABLISHED状态,实现TCP三次握手。为什么要三次握手? 为了避免已生效的连贯申请报文段忽然又传送到了服务端,因此产生谬误。 具体例子:“已生效的连贯申请报文段”的产生在这样一种状况下:client收回的第一个连贯申请报文段并没有失落,而是在某个网络结点长时间的滞留了,以至延误到连贯开释当前的某个工夫才达到server。原本这是一个早已生效的报文段。但server收到此生效的连贯申请报文段后,就误认为是client再次收回的一个新的连贯申请。 于是就向client收回确认报文段,批准建设连贯。假如不采纳“三次握手”,那么只有server收回确认,新的连贯就建设了。因为当初client并没有收回建设连贯的申请,因而不会理会server的确认,也不会向server发送数据。但server却认为新的运输连贯曾经建设,并始终期待client发来数据。这样,server的很多资源就白白浪费掉了。采纳“三次握手”的方法能够避免上述景象产生。例如方才那种状况,client不会向server的确认收回确认。server因为收不到确认,就晓得client并没有要求建设连贯。” 2.四次挥手 当客户端和服务器通过三次握手建设了TCP连贯当前,当数据传送结束,必定是要断开TCP连贯的啊。那对于TCP的断开连接,这里就有了神秘的“四次离别”。 第一次离别:主机1(能够使客户端,也能够是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这示意主机1没有数据要发送给主机2了;第二次离别:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2通知主机1,我“批准”你的敞开申请;第三次离别:主机2向主机1发送FIN报文段,申请敞开连贯,同时主机2进入LAST_ACK状态;第四次离别:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,而后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段当前,就敞开连贯;此时,主机1期待2MSL后仍然没有收到回复,则证实Server端已失常敞开,那好,主机1也能够敞开连贯了。为什么要四次离别? ...

December 24, 2020 · 1 min · jiezi

关于tcp-ip:小菜学网络以太网帧结构

上一大节,咱们通过一个虚构的协定,初步意识了数据链路层的工作原理。数据链路层次要解决由若干主机组成的本地网络的通信问题,寻址 和 复用分用 思维在其中施展着关键作用。 数据链路层有一个十分重要的协定—— 以太网协定 。接下来,咱们一起来揭开它的神秘面纱! 应用以太网协定进行通信的主机间,必须通过某种介质间接相连。通信介质能够是实在的物理设施,如网线、网卡等;也能够是通过虚拟化技术实现的虚构设施。 以太网帧在以太网中,数据通信的根本单位是 以太网帧 ( _frame_ ),由 头部 ( header )、数据 ( data )以及 校验和 ( checksum )三局部形成: 请留神,这图中的单位为字节,而不是比特了。头部以太网帧头部蕴含 3 个字段,顺次是: 目标地址 ,长度是 6 字节,用于标记数据由哪台机器接管;源地址 ,长度也是 6 字节,用于标记数据由哪台机器发送;类型 ,长度是 2 字节,用于标记数据该如何解决, 0x0800 示意该帧数据是一个 IP 包(后续章节介绍)。除了字段长度有所拓展之外,以太网帧跟咱们虚构进去的协定一模一样。对了,咱们留神到一点小差别——在以太网帧中, 目标地址 放在最后面。 这其中有什么非凡思考吗? 的确是有的。接管方收到一个以太网帧后,最先解决 目标地址 字段。如果发现该帧不是发给本人的,前面的字段以及数据就不须要解决了。根底网络协议影响方方面面,设计时解决效率也是一个十分重要的考量。 数据数据 能够是任何须要发送的信息,长度可变, 46 至 1500 字节均可。 下层协定报文,例如 IP 包,能够作为数据封装在以太网帧中,在数据链路层中传输。因而,数据还有另一个更形象的称呼,即 负荷 ( payload )。请自行脑补数据 搭载 在以太网帧这个交通工具上旅行的画面。 校验和因为物理信号可能受到环境的烦扰,网络设备传输的比特流可能会出错。一个以太网帧从一台主机传输到另一台主机的过程中,也可能因各种因素而出错。那么当主机收到以太网帧时,如何确定它是完整无缺的呢? 答案是: 校验和 。咱们能够用诸如 循环冗余校验 ( CRC )算法,为以太网帧计算校验和。如果以太网帧在传输的过程出错,校验和将产生扭转。 留神到,以太网帧最初面有一个 4 字节字段,用于保留校验和。发送者负责为每个以太网帧计算校验和,并将计算结果填写在校验和字段中;接收者接到以太网帧后,从新计算校验和并与校验和字段进行比照;如果两个校验和不统一,阐明该帧在传输时出错了。 【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注:

December 15, 2020 · 1 min · jiezi

关于tcp-ip:小菜学网络数据链路层概述

上一大节,咱们以两台主机为例,探讨了一个理想化的物理层模型。 当初,咱们将问题进一步延长:多台主机如何实现两两通信呢?咱们以三台主机为例进行探讨: 如上图,有 _3_ 台主机,名字别离是: _ant_ 、 _bee_ 以及 _cicada_ 。 为了实现主机间通信,咱们将三者连贯到一根共用导线。每台主机都能够扭转导线电平,也能够检测导线电平。 与此同时,假如在硬件层面,多方通信抵触仲裁机制曾经实现并且可用。 这样,是否就解决了多主机通信问题呢? 寻址假如, _ant_ 向 _bee_ 发送一个数据 11110000 (粗体)。因为导线是共享的,所有主机都能够检测到电平信号。换句话讲, _bee_ 和 _cicada_ 都会收到这个数据 11110000 ,而 _cicada_ 本不应该接管这个数据!另一方面, _bee_ 收到数据后,也不晓得数据到底是谁发给它的。 为了简化接下来的探讨,咱们省略了物理层起止管制比特 1010 和 0101 。数据不禁产生困惑:_我从哪来?去往何方?_ 为此,咱们须要引入一些比特,用来标识数据的 起源 以及 目的地 。例子中只有 3 台主机,两个比特就足以惟一确定一台主机: 机器比特ant00bee01cicada10那么,发送数据时,再加上两个比特用于示意起源主机,两个比特示意指标主机,问题不就解决了吗? 如图,主机下方的灰色比特惟一标识一台主机: ant 发送数据时,在最后面加上两个比特(红色)用于标识起源机器, 00 示意 ant ;另外两个比特(绿色)用于标识指标机器, 01 示意 bee 。 当 _bee_ 收到数据后,查看前两个比特(红色),值为 00 ,便晓得它是 _ant_ 收回来的;查看紧接着的两个比特(绿色),值为 01 ,与本人匹配上,便欢快地收下了。相同, _cicada_ 收到数据后,发现 01 和本人 10 匹配不上,便抛弃这个数据。 新引入比特所起的作用,在计算机网络中称为 寻址 。 这两个比特也就称为 地址 ,其中,红色为源地址,绿色为目标地址。 引入寻址机制后,咱们完满地解答了数据从哪来,到哪去的困惑。 复用与分用信道只有一个,然而通信需要是无穷无尽的——传输钻研数值、文件打印、即时通讯,不一而足。 如何解决这个矛盾呢?套路还是一样的——引入新的比特标识数据类型。 假如,总的通信需要就下面这 3 个。那么, 2 个额定的比特即可解决问题。 类型比特钻研数据00文件打印01即时通讯10举个例子,假如 _ant_ 向 _bee_ 上报钻研数据并打印一个文件: _bee_ 接管到数据后,依据紫色比特,决定数据如何解决。通过新引入的紫色比特,咱们在同个信道上实现了不同的通信! 接下来,从实践的视角来扫视这个场景: 信道只有一个,却要承载多样的通信工作。在发送端,通过退出紫色比特,将不同的数据通过一个共用信道发送进来,这个过程叫做 复用 ( _Multiplexing_ );在接收端,从共用信道上接收数据,而后查看紫色比特决定数据如何解决,这个过程叫做 分用 ( _Demultiplexing_ )。 在接下来的章节,咱们将看到 复用分用 的思维贯彻计算机网络的始终。 到目前为止,咱们引入了 _3_ 种不同的比特,别离是 源地址 、 目标地址 以及 数据类型 。 对于这些比特的位数以及含意的约定,便形成 网络协议 。 至此,咱们解决了多台共用信道主机间的通信问题,这相当于网络分层构造中的 数据链路层 。数据链路层负责为下层提供链路通信能力,次要作用是: ...

December 11, 2020 · 1 min · jiezi

关于tcp-ip:小菜学网络物理层概述

通信模型假如,计算机网络当初还没有被创造进去,作为计算机科学家的你,想在两台主机间传输数据,该怎么办? 这时,你可能会想到,用一根电缆将两台主机连接起来: 物理课大家都学过,电压能够分为 低电平 和 高电平 。因而,咱们能够通过管制电平高下,来达到传输信息的目标: 主机①管制电缆电平的高下, 主机②检测电平的高下,主机间数据传输便实现了! 用数学语言进一步形象:以低电平示意 0 ,高电平示意 1 。这样就失去一个理想化的信道: 通过信道,单方能够传输由 0 和 1 组成的比特流,上图中传输的比特流是 1111001011... (从右往左看)。比特流能够编码任意信息,例如:用 1111 通知对方本地开机了,用 0000 通知对方本地筹备关机了。 至此,咱们是否失去一个牢靠的比特流信道,万事具备了呢? ——实践上是这样的,但事实世界往往要比理想化的模型更简单一些。 收发管制信道是无穷无尽的,状态要么为 0 ,要么为 1 ,没有一种示意闲暇的非凡状态: 举个例子,主机①向主机②发送比特序列 101101001101 ,如下图(从右往左读)。最初一个比特是 1 ,对应的电平是高电平。发送结束后,主机①进行管制电缆电平,所以仍放弃着高电平状态: 换句话讲,信道看起来仍依照既定节奏,源源不断地发送比特 1 (灰色局部), 主机②如何检测比特流结尾呢? 咱们能够定义一些非凡的比特序列,用于标识结尾和结尾。例如, 101010 示意结尾, 010101 示意结尾: 主机①首先发送 101010 (绿色),通知主机②,它开始发数据了;主机①接着发送数据 01101011 (彩色局部);主机①最初发送 010101 (红色),通知主机②,数据发送结束;留神到,平时信道为 1 (灰色),也就是代表闲暇状态。 抵触仲裁如果两台服务器同时向信道发送数据,会产生什么事件呢? 一边发 0 ,一边发 1 ,那信道到底应该是 0 还是 1 呢? 必定抵触了嘛!有什么方法能够解决抵触吗? 计划①,引入一根新电缆,组成双电缆构造,每根电缆只负责一个方向的传输。这样一来,两个方向的传输放弃独立,互不烦扰,能够同时进行。这样的传输模式在通信畛域称为 全双工模式 。 计划②,在硬件层面实现一种仲裁机制:当检测到多台主机同时传输数据时,及时叫停,并协商哪一方先发。这样一来,信道同样反对双向通信,但不可同时进行。这种传输模式则称为 半双工模式 。 单工 ( simplex ),只反对单向通信,即从其中一端发往另一端,反之不行;半双工 ( half duplex ),反对双向通信,但不可同时进行;全双工 ( full duplex ),反对双向通信,而且能够同时进行;常见物理介质除了电信号,还有其余物理信号亦可充当通信介质。那么,常见的物理介质都有哪些呢? 电信号,例如电缆,网线就是电缆中的一种;光信号,例如光纤;电磁波,例如 WiFi ,无线网卡,蓝牙等;【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注:

December 10, 2020 · 1 min · jiezi

关于tcp-ip:15-张图-把TCPIP-讲得一清二楚

一、TCP/IP模型TCP/IP协定模型(Transmission Control Protocol/Internet Protocol),蕴含了一系列形成互联网根底的网络协议,是Internet的外围协定。 基于TCP/IP的参考模型将协定分成四个档次,它们别离是链路层、网络层、传输层和应用层。下图示意TCP/IP模型与OSI模型各层的对照关系。TCP/IP协定族依照档次由上到下,层层包装。最下面的是应用层,这外面有http,ftp 等等咱们相熟的协定。而第二层则是传输层,驰名的TCP和UDP协定就在这个档次。第三层是网络层,IP协定就在这里,它负责对数据加上IP地址和其余的数据以确定传输的指标。第四层是数据链路层,这个档次为待传送的数据退出一个以太网协定头,并进行CRC编码,为最初的数据传输做筹备。上图分明地示意了TCP/IP协定中每个层的作用,而TCP/IP协定通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层一直地封装首部与尾部,增加一些传输的信息,确保能传输到目的地。出栈的过程,数据接管方每层一直地拆除首部与尾部,失去最终传输的数据。上图以HTTP协定为例,具体阐明。 二、数据链路层物理层负责0、1比特流与物理设施电压高下、光的闪灭之间的调换。数据链路层负责将0、1序列划分为数据帧从一个节点传输到邻近的另一个节点,这些节点是通过MAC来惟一标识的(MAC,物理地址,一个主机会有一个MAC地址)。 封装成帧: 把网络层数据报加头和尾,封装成帧,帧头中包含源MAC地址和目标MAC地址。通明传输:零比特填充、转义字符。牢靠传输: 在出错率很低的链路上很少用,然而无线链路WLAN会保障牢靠传输。过错检测(CRC):接收者检测谬误,如果发现过错,抛弃该帧。三、网络层1、IP协定IP协定是TCP/IP协定的外围,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要留神的是,IP不是牢靠的协定,这是说,IP协定没有提供一种数据未传播当前的解决机制,这被认为是下层协定:TCP或UDP要做的事件。 1.1 IP地址在数据链路层中咱们个别通过MAC地址来辨认不同的节点,而在IP层咱们也要有一个相似的地址标识,这就是IP地址。 32位IP地址分为网络位和地址位,这样做能够缩小路由器中路由表记录的数目,有了网络地址,就能够限定领有雷同网络地址的终端都在同一个范畴内,那么路由表只须要保护一条这个网络地址的方向,就能够找到相应的这些终端了。 A类IP地址: 0.0.0.0~127.0.0.0B类IP地址:128.0.0.1~191.255.0.0C类IP地址:192.168.0.0~239.255.255.0 1.2 IP协定头这里只介绍:八位的TTL字段。这个字段规定该数据包在穿过多少个路由之后才会被摈弃。某个IP数据包每穿过一个路由器,该数据包的TTL数值就会缩小1,当该数据包的TTL成为零,它就会被主动摈弃。 这个字段的最大值也就是255,也就是说一个协定包也就在路由器外面穿行255次就会被抛弃了,依据零碎的不同,这个数字也不一样,个别是32或者是64。 2、ARP及RARP协定ARP 是依据IP地址获取MAC地址的一种协定。 ARP(地址解析)协定是一种解析协定,原本主机是齐全不晓得这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下本人的ARP高速缓存(就是一个IP-MAC地址对应表缓存)。 如果查问的IP-MAC值对不存在,那么主机就向网络发送一个ARP协定播送包,这个播送包外面就有待查问的IP地址,而间接收到这份播送的包的所有主机都会查问本人的IP地址,如果收到播送包的某一个主机发现自己符合条件,那么就筹备好一个蕴含本人的MAC地址的ARP包传送给发送ARP播送的主机。 而播送主机拿到ARP包后会更新本人的ARP缓存(就是寄存IP-MAC对应表的中央)。发送播送的主机就会用新的ARP缓存数据筹备好数据链路层的的数据包发送工作。 RARP协定的工作与此相反,不做赘述。 3、ICMP协定IP协定并不是一个牢靠的协定,它不保证数据被送达,那么,天然的,保证数据送达的工作应该由其余的模块来实现。其中一个重要的模块就是ICMP(网络管制报文)协定。ICMP不是高层协定,而是IP层的协定。 当传送IP数据包产生谬误。比方主机不可达,路由不可达等等,ICMP协定将会把错误信息封包,而后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建设在IP层以上的协定是可能做到平安的起因。 四、pingping能够说是ICMP的最驰名的利用,是TCP/IP协定的一部分。利用“ping”命令能够查看网络是否连通,能够很好地帮忙咱们剖析和断定网络故障。 例如:当咱们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。个别的信息如下:ping这个单词源自声纳定位,而这个程序的作用也的确如此,它利用ICMP协定包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发申请,受到申请的主机则用类型码为8的ICMP回应。 五、TracerouteTraceroute是用来侦测主机到目标主机之间所经路由状况的重要工具,也是最便当的工具。 Traceroute的原理是十分十分的有意思,它收到到目标主机的IP后,首先给目标主机发送一个TTL=1的UDP数据包,而通过的第一个路由器收到这个数据包当前,就主动把TTL减1,而TTL变为0当前,路由器就把这个包给摈弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报当前再发一个TTL=2的UDP数据报给目标主机,而后刺激第二个路由器给主机发ICMP数据 报。如此往返直到达到目标主机。这样,traceroute就拿到了所有的路由器IP。 六、TCP/UDPTCP/UDP都是是传输层协定,然而两者具备不同的个性,同时也具备不同的利用场景,上面以图表的模式比照剖析。面向报文 面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因而,应用程序必须抉择适合大小的报文。若报文太长,则IP层须要分片,升高效率。若太短,会是IP太小。 面向字节流 面向字节流的话,尽管应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无构造的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就能够把它划分短一些再传送。 对于拥塞管制,流量管制,是TCP的重点,前面解说。 TCP和UDP协定的一些利用 什么时候应该应用TCP?当对网络通讯品质有要求的时候,比方:整个数据要准确无误的传递给对方,这往往用于一些要求牢靠的利用,比方HTTP、HTTPS、FTP等传输文件的协定,POP、SMTP等邮件传输的协定。 什么时候应该应用UDP?当对网络通讯品质要求不高的时候,要求网络通讯速度能尽量的快,这时就能够应用UDP。 七、DNSDNS(Domain Name System,域名零碎),因特网上作为域名和IP地址互相映射的一个分布式数据库,可能使用户更不便的拜访互联网,而不必去记住可能被机器间接读取的IP数串。通过主机名,最终失去该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协定运行在UDP协定之上,应用端口号53。 八、TCP连贯的建设与终止1、三次握手TCP是面向连贯的,无论哪一方向另一方发送数据之前,都必须先在单方之间建设一条连贯。在TCP/IP协定中,TCP协定提供牢靠的连贯服务,连贯是通过三次握手进行初始化的。三次握手的目标是同步连贯单方的序列号和确认号并替换 TCP窗口大小信息。第一次握手:建设连贯。客户端发送连贯申请报文段,将SYN地位为1,Sequence Number为x;而后,客户端进入SYN_SEND状态,期待服务器的确认; 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,须要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,本人本人还要发送SYN申请信息,将SYN地位为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK报文段。而后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送结束当前,客户端和服务器端都进入ESTABLISHED状态,实现TCP三次握手。 为什么要三次握手?为了避免已生效的连贯申请报文段忽然又传送到了服务端,因此产生谬误。 具体例子:“已生效的连贯申请报文段”的产生在这样一种状况下:client收回的第一个连贯申请报文段并没有失落,而是在某个网络结点长时间的滞留了,以至延误到连贯开释当前的某个工夫才达到server。原本这是一个早已生效的报文段。但server收到此生效的连贯申请报文段后,就误认为是client再次收回的一个新的连贯申请。 于是就向client收回确认报文段,批准建设连贯。假如不采纳“三次握手”,那么只有server收回确认,新的连贯就建设了。因为当初client并没有收回建设连贯的申请,因而不会理会server的确认,也不会向server发送数据。但server却认为新的运输连贯曾经建设,并始终期待client发来数据。这样,server的很多资源就白白浪费掉了。采纳“三次握手”的方法能够避免上述景象产生。例如方才那种状况,client不会向server的确认收回确认。server因为收不到确认,就晓得client并没有要求建设连贯。” 2、四次挥手当客户端和服务器通过三次握手建设了TCP连贯当前,当数据传送结束,必定是要断开TCP连贯的啊。那对于TCP的断开连接,这里就有了神秘的“四次离别”。第一次离别:主机1(能够使客户端,也能够是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这示意主机1没有数据要发送给主机2了; 第二次离别:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2通知主机1,我“批准”你的敞开申请;第三次离别:主机2向主机1发送FIN报文段,申请敞开连贯,同时主机2进入LAST_ACK状态; 第四次离别:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,而后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段当前,就敞开连贯;此时,主机1期待2MSL后仍然没有收到回复,则证实Server端已失常敞开,那好,主机1也能够敞开连贯了。 为什么要四次离别?TCP协定是一种面向连贯的、牢靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1收回FIN报文段时,只是示意主机1曾经没有数据要发送了,主机1通知主机2,它的数据曾经全副发送结束了;然而,这个时候主机1还是能够承受来自主机2的数据;当主机2返回ACK报文段时,示意它曾经晓得主机1没有数据发送了,然而主机2还是能够发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就示意主机2也没有数据要发送了,就会通知主机1,我也没有数据要发送了,之后彼此就会欢快的中断这次TCP连贯。 为什么要期待2MSL?MSL:报文段最大生存工夫,它是任何报文段被抛弃前在网络内的最长工夫。起因有二: 保障TCP协定的全双工连贯可能牢靠敞开保障这次连贯的反复数据段从网络中隐没第一点:如果主机1间接CLOSED了,那么因为IP协定的不可靠性或者是其它网络起因,导致主机2没有收到主机1最初回复的ACK。那么主机2就会在超时之后持续发送FIN,此时因为主机1曾经CLOSED了,就找不到与重发的FIN对应的连贯。所以,主机1不是间接进入CLOSED,而是要放弃TIME_WAIT,当再次收到FIN的时候,可能保障对方收到ACK,最初正确的敞开连贯。 ...

December 8, 2020 · 1 min · jiezi

关于tcp-ip:深入浅出-TCPIP-协议栈

TCP/IP 协定栈是一系列网络协议的总和,是形成网络通信的外围骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协定采纳4层构造,别离是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协定来实现本人的需要。因为咱们大部分工夫都工作在应用层,上层的事件不必咱们操心;其次网络协议体系自身就很简单宏大,入门门槛高,因而很难搞分明TCP/IP的工作原理,艰深一点讲就是,一个主机的数据要通过哪些过程能力发送到对方的主机上。 接下来,咱们就来摸索一下这个过程。 0、物理介质 物理介质就是把电脑连接起来的物理伎俩,常见的有光纤、双绞线,以及无线电波,它决定了电信号(0和1)的传输方式,物理介质的不同决定了电信号的传输带宽、速率、传输间隔以及抗干扰性等等。 TCP/IP协定栈分为四层,每一层都由特定的协定与对方进行通信,而协定之间的通信最终都要转化为 0 和 1 的电信号,通过物理介质进行传输能力达到对方的电脑,因而物理介质是网络通信的基石。 上面咱们通过一张图先来大略理解一下TCP/IP协定的根本框架: 当通过http发动一个申请时,应用层、传输层、网络层和链路层的相干协定顺次对该申请进行包装并携带对应的首部,最终在链路层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接管到数据包当前,而后再一层一层采纳对应的协定进行拆包,最初把应用层数据交给利用程序处理。 网络通信就好比送快递,商品里面的一层层包裹就是各种协定,协定蕴含了商品信息、收货地址、收件人、联系方式等,而后还须要配送车、配送站、快递员,商品能力最终达到用户手中。 个别状况下,快递是不能中转的,须要先转发到对应的配送站,而后由配送站再进行派件。 配送车就是物理介质,配送站就是网关, 快递员就是路由器,收货地址就是IP地址,联系方式就是MAC地址。 快递员负责把包裹转发到各个配送站,配送站依据播种地址里的省市区,确认是否须要持续转发到其余配送站,当包裹达到了指标配送站当前,配送站再依据联系方式找到收件人进行派件。 有了整体概念当前,上面咱们具体理解一下各层的分工。 1、链路层 网络通信就是把有特定意义的数据通过物理介质传送给对方,单纯的发送 0 和 1 是没有意义的,要传输有意义的数据,就须要以字节为单位对 0 和 1 进行分组,并且要标识好每一组电信号的信息特色,而后依照分组的程序顺次发送。以太网规定一组电信号就是一个数据包,一个数据包被称为一帧, 制订这个规定的协定就是以太网协定。一个残缺的以太网数据包如下图所示: 整个数据帧由首部、数据和尾部三局部组成,首部固定为14个字节,蕴含了指标MAC地址、源MAC地址和类型;数据最短为46个字节,最长为1500个字节,如果须要传输的数据很长,就必须宰割成多个帧进行发送;尾部固定为4个字节,示意数据帧校验序列,用于确定数据包在传输过程中是否损坏。因而,以太网协定通过对电信号进行分组并造成数据帧,而后通过物理介质把数据帧发送给接管方。那么以太网如何来识接管方的身份呢? 以太网规协定定,接入网络的设施都必须装置网络适配器,即网卡, 数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接管地址,也就是帧首部所蕴含的MAC地址,MAC地址是每块网卡的身份标识,就如同咱们身份证上的身份证号码,具备寰球唯一性。MAC地址采纳十六进制标识,共6个字节, 前三个字节是厂商编号,后三个字节是网卡流水号,例如4C-0F-6E-12-D2-19 有了MAC地址当前,以太网采纳播送模式,把数据包发给该子网内所有主机,子网内每台主机在接管到这个包当前,都会读取首部里的指标MAC地址,而后和本人的MAC地址进行比照,如果雷同就做下一步解决,如果不同,就抛弃这个包。 所以链路层的次要工作就是对电信号进行分组并造成具备特定意义的数据帧,而后以播送的模式通过物理介质发送给接管方。 这里分享几个视频解说、手写代码实现一个协定栈: Linux 服务器开发——tcp训练营epoll与网络io 单线程,多线程 丨手写代码丨后盾开发丨Linux网络编程丨底层原理 上_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili Linux 服务器开发——tcp训练营epoll与网络io 单线程,多线程 丨手写代码丨后盾开发丨Linux网络编程丨底层原理 下_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili Linux 服务器开发——tcp训练营,滑动窗口,udp并发,状态迁徙图,挥手中间状态丨网络底层原理丨手写代码实现网络协议栈 上_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili Linux 服务器开发——tcp训练营,滑动窗口,udp并发,状态迁徙图,挥手中间状态丨网络底层原理丨手写代码实现网络协议栈 下_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 更多Linux C/C++后盾服务器开发知识点分享+qun720209036:内容包含C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,Skynet,Linux内核,Docker,TCP/IP,协程,DPDK多个高级知识点。 2、网络层 ...

November 4, 2020 · 1 min · jiezi

关于tcp-ip:关于-TCPIP必知必会的十个问题

起源:https://juejin.im/post/684490...作者:Ruheng本文整顿了一些TCP/IP协定簇中须要必知必会的十大问题,既是面试高频问题,又是程序员必备根底素养。 TCP/IP十个问题 一、TCP/IP模型TCP/IP协定模型(Transmission Control Protocol/InternetProtocol),蕴含了一系列形成互联网根底的网络协议,是Internet的外围协定。 基于TCP/IP的参考模型将协定分成四个档次,它们别离是链路层、网络层、传输层和应用层。下图示意TCP/IP模型与OSI模型各层的对照关系。 TCP/IP协定族依照档次由上到下,层层包装。最下面的是应用层,这外面有http,ftp,等等咱们相熟的协定。而第二层则是传输层,驰名的TCP和UDP协定就在这个档次。第三层是网络层,IP协定就在这里,它负责对数据加上IP地址和其余的数据以确定传输的指标。第四层是数据链路层,这个档次为待传送的数据退出一个以太网协定头,并进行CRC编码,为最初的数据传输做筹备。 上图分明地示意了TCP/IP协定中每个层的作用,而TCP/IP协定通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层一直地封装首部与尾部,增加一些传输的信息,确保能传输到目的地。出栈的过程,数据接管方每层一直地拆除首部与尾部,失去最终传输的数据。 上图以HTTP协定为例,具体阐明。 二、数据链路层物理层负责0、1比特流与物理设施电压高下、光的闪灭之间的调换。数据链路层负责将0、1序列划分为数据帧从一个节点传输到邻近的另一个节点,这些节点是通过MAC来惟一标识的(MAC,物理地址,一个主机会有一个MAC地址)。 封装成帧: 把网络层数据报加头和尾,封装成帧,帧头中包含源MAC地址和目标MAC地址。通明传输:零比特填充、转义字符。牢靠传输: 在出错率很低的链路上很少用,然而无线链路WLAN会保障牢靠传输。过错检测(CRC):接收者检测谬误,如果发现过错,抛弃该帧。三、网络层1.IP协定IP协定是TCP/IP协定的外围,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要留神的是,IP不是牢靠的协定,这是说,IP协定没有提供一种数据未传播当前的解决机制,这被认为是下层协定:TCP或UDP要做的事件。 1.1 IP地址在数据链路层中咱们个别通过MAC地址来辨认不同的节点,而在IP层咱们也要有一个相似的地址标识,这就是IP地址。 32位IP地址分为网络位和地址位,这样做能够缩小路由器中路由表记录的数目,有了网络地址,就能够限定领有雷同网络地址的终端都在同一个范畴内,那么路由表只须要保护一条这个网络地址的方向,就能够找到相应的这些终端了。 A类IP地址: 0.0.0.0~127.0.0.0 B类IP地址:128.0.0.1~191.255.0.0 C类IP地址:192.168.0.0~239.255.255.01.2 IP协定头 这里只介绍:八位的TTL字段。这个字段规定该数据包在穿过多少个路由之后才会被摈弃。某个IP数据包每穿过一个路由器,该数据包的TTL数值就会缩小1,当该数据包的TTL成为零,它就会被主动摈弃。 这个字段的最大值也就是255,也就是说一个协定包也就在路由器外面穿行255次就会被抛弃了,依据零碎的不同,这个数字也不一样,个别是32或者是64。 2.ARP及RARP协定ARP 是依据IP地址获取MAC地址的一种协定。 ARP(地址解析)协定是一种解析协定,原本主机是齐全不晓得这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下本人的ARP高速缓存(就是一个IP-MAC地址对应表缓存)。 如果查问的IP-MAC值对不存在,那么主机就向网络发送一个ARP协定播送包,这个播送包外面就有待查问的IP地址,而间接收到这份播送的包的所有主机都会查问本人的IP地址,如果收到播送包的某一个主机发现自己符合条件,那么就筹备好一个蕴含本人的MAC地址的ARP包传送给发送ARP播送的主机。 而播送主机拿到ARP包后会更新本人的ARP缓存(就是寄存IP-MAC对应表的中央)。发送播送的主机就会用新的ARP缓存数据筹备好数据链路层的的数据包发送工作。 RARP协定的工作与此相反,不做赘述。 3\. ICMP协定IP协定并不是一个牢靠的协定,它不保证数据被送达,那么,天然的,保证数据送达的工作应该由其余的模块来实现。其中一个重要的模块就是ICMP(网络管制报文)协定。ICMP不是高层协定,而是IP层的协定。 当传送IP数据包产生谬误。比方主机不可达,路由不可达等等,ICMP协定将会把错误信息封包,而后传送回给主机。给主机一个处理错误的机会,这也就是为什么说建设在IP层以上的协定是可能做到平安的起因。 四、pingping能够说是ICMP的最驰名的利用,是TCP/IP协定的一部分。利用“ping”命令能够查看网络是否连通,能够很好地帮忙咱们剖析和断定网络故障。 例如:当咱们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。个别的信息如下: ping这个单词源自声纳定位,而这个程序的作用也的确如此,它利用ICMP协定包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请求,受到申请的主机则用类型码为8的ICMP回应。 ping程序来计算间隔时间,并计算有多少个包被送达。用户就能够判断网络大抵的状况。咱们能够看到, ping给进去了传送的工夫和TTL的数据。 五、TracerouteTraceroute是用来侦测主机到目标主机之间所经路由状况的重要工具,也是最便当的工具。 Traceroute的原理是十分十分的有意思,它收到到目标主机的IP后,首先给目标主机发送一个TTL=1的UDP数据包,而通过的第一个路由器收到这个数据包当前,就主动把TTL减1,而TTL变为0当前,路由器就把这个包给摈弃了,并同时产生一个主机不可达的ICMP数据报给主机。主机收到这个数据报当前再发一个TTL=2的UDP数据报给目标主机,而后刺激第二个路由器给主机发ICMP数据报。如此往返直到达到目标主机。这样,traceroute就拿到了所有的路由器IP。 六、TCP/UDPTCP/UDP都是是传输层协定,然而两者具备不同的个性,同时也具备不同的利用场景,上面以图表的模式比照剖析。 面向报文面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因而,应用程序必须抉择适合大小的报文。若报文太长,则IP层须要分片,升高效率。若太短,会是IP太小。 面向字节流面向字节流的话,尽管应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无构造的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就能够把它划分短一些再传送。 对于拥塞管制,流量管制,是TCP的重点,前面解说。 TCP和UDP协定的一些利用 什么时候应该应用TCP?当对网络通讯品质有要求的时候,比方:整个数据要准确无误的传递给对方,这往往用于一些要求牢靠的利用,比方HTTP、HTTPS、FTP等传输文件的协定,POP、SMTP等邮件传输的协定。 什么时候应该应用UDP?当对网络通讯品质要求不高的时候,要求网络通讯速度能尽量的快,这时就能够应用UDP。 七、DNSDNS(Domain NameSystem,域名零碎),因特网上作为域名和IP地址互相映射的一个分布式数据库,可能使用户更不便的拜访互联网,而不必去记住可能被机器间接读取的IP数串。通过主机名,最终失去该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协定运行在UDP协定之上,应用端口号53。 八、TCP连贯的建设与终止1.三次握手TCP是面向连贯的,无论哪一方向另一方发送数据之前,都必须先在单方之间建设一条连贯。在TCP/IP协定中,TCP协定提供牢靠的连贯服务,连贯是通过三次握手进行初始化的。三次握手的目标是同步连贯单方的序列号和确认号并替换TCP窗口大小信息。 第一次握手: 建设连贯。客户端发送连贯申请报文段,将SYN地位为1,SequenceNumber为x;而后,客户端进入SYN_SEND状态,期待服务器的确认; 第二次握手: 服务器收到SYN报文段。服务器收到客户端的SYN报文段,须要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,本人本人还要发送SYN申请信息,将SYN地位为1,SequenceNumber为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态; 第三次握手: 客户端收到服务器的SYN+ACK报文段。而后将AcknowledgmentNumber设置为y+1,向服务器发送ACK报文段,这个报文段发送结束当前,客户端和服务器端都进入ESTABLISHED状态,实现TCP三次握手。 ...

October 31, 2020 · 1 min · jiezi

关于tcp-ip:这次一定让你记住-TCP-三次握手四手挥手

TCP协定全称为:Transmission Control Protocol,是一种面向链接、保障数据传输平安、牢靠的数据传输协定。为了确保数据的牢靠传输,不仅须要对收回的每个字节进行编号确认,还须要验证每一个数据包的有效性。每个TCP数据包是关闭在IP包中的,每个一IP包的前面紧跟着的是TCP头,TCP报文格式如下: 源端口和目标端口字段 TCP源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。TCP目标端口(Destination Port):指标计算机的应用程序端口号,占 16 位。序列号字段 CP序列号(Sequence Number):占 32 位。它示意本报文段所发送数据的第一个字节的编号。在 TCP 连贯中,所传送的字节流的每一个字节都会按程序编号。当SYN标记不为1时,这是以后数据分段第一个字母的序列号;如果SYN的值是1时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步。这时,第一个字节的序列号比这个字段的值大1,也就是ISN加1。 确认号字段 TCP 确认号(Acknowledgment Number,ACK Number):占 32 位。它示意接管方冀望收到发送方下一个报文段的第一个字节数据的编号。其值是接管计算机行将接管到的下一个序列号,也就是下一个接管到的字节的序列号加1。 数据偏移字段 TCP 首部长度(Header Length):数据偏移是指数据段中的“数据”局部起始处间隔 TCP 数据段起始处的字节偏移量,占 4 位。其实这里的“数据偏移”也是在确定 TCP 数据段头局部的长度,通知接收端的应用程序,数据从何处开始。 保留字段 保留(Reserved):占 4 位。为 TCP 未来的倒退预留空间,目前必须全副为 0。 标记位字段 CWR(Congestion Window Reduce):拥塞窗口缩小标记,用来表明它接管到了设置 ECE 标记的 TCP 包。并且,发送方收到音讯之后,通过减小发送窗口的大小来升高发送速率。ECE(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 性能的。在数据传输过程中,它也用来表明接管到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥挤。URG(Urgent):示意本报文段中发送的数据是否蕴含紧急数据。URG=1 时示意有紧急数据。当 URG=1 时,前面的紧急指针字段才无效。ACK:示意后面的确认号字段是否无效。ACK=1 时示意无效。只有当 ACK=1 时,后面的确认号字段才无效。TCP 规定,连贯建设后,ACK 必须为 1。PSH(Push):通知对方收到该报文段后是否立刻把数据推送给下层。如果值为 1,示意该当立刻把数据提交给下层,而不是缓存起来。RST:示意是否重置连贯。如果 RST=1,阐明 TCP 连贯呈现了严重错误(如主机解体),必须开释连贯,而后再从新建设连贯。SYN:在建设连贯时应用,用来同步序号。当 SYN=1,ACK=0 时,示意这是一个申请建设连贯的报文段;当 SYN=1,ACK=1 时,示意对方批准建设连贯。SYN=1 时,阐明这是一个申请建设连贯或批准建设连贯的报文。只有在前两次握手中 SYN 才为 1。FIN:标记数据是否发送结束。如果 FIN=1,示意数据曾经发送实现,能够开释连贯。窗口大小字段 ...

October 12, 2020 · 2 min · jiezi

关于tcp-ip:最详细的Linux-TCPIP-协议栈源码分析

一.linux内核网络栈代码的筹备常识1. linux内核ipv4网络局部分层构造: BSD socket层: 这一部分解决BSD socket相干操作,每个socket在内核中以struct socket构造体现。这一部分的文件 次要有:/net/socket.c /net/protocols.c etc INET socket层:BSD socket是个能够用于各种网络协议的接口,而当用于tcp/ip,即建设了AF_INET模式的socket时, 还须要保留些额定的参数,于是就有了struct sock构造。文件次要 有:/net/ipv4/protocol.c /net/ipv4/af_inet.c /net/core/sock.c etc TCP/UDP层:解决传输层的操作,传输层用struct inet_protocol和struct proto两个构造示意。文件次要 有:/net/ipv4/udp.c /net/ipv4/datagram.c /net/ipv4/tcp.c /net/ipv4/tcp_input.c /net/ipv4//tcp_output.c /net/ipv4/tcp_minisocks.c /net/ipv4/tcp_output.c /net/ipv4/tcp_timer.c etc IP层:解决网络层的操作,网络层用struct packet_type构造示意。文件次要有:/net/ipv4/ip_forward.c ip_fragment.c ip_input.c ip_output.c etc. 数据链路层和驱动程序:每个网络设备以struct net_device示意,通用的解决在dev.c中,驱动程序都在/driver/net目 录下。 2. 两台主机建设udp通信所走过的函数列表 ^ | sys_read fs/read_write.c | sock_read net/socket.c | sock_recvmsg net/socket.c | inet_recvmsg net/ipv4/af_inet.c | udp_recvmsg net/ipv4/udp.c skb_recv_datagram net/core/datagram.csock_queue_rcv_skb include/net/sock.hudp_queue_rcv_skb net/ipv4/udp.cudp_rcv net/ipv4/udp.cip_local_deliver_finish net/ipv4/ip_input.cip_local_deliver net/ipv4/ip_input.cip_recv net/ipv4/ip_input.cnet_rx_action net/dev.cnetif_rx net/dev.cel3_rx driver/net/3c309.cel3_interrupt driver/net/3c309.c========================== | sys_write fs/read_write.c | sock_writev net/socket.c | sock_sendmsg net/socket.c | inet_sendmsg net/ipv4/af_inet.c | udp_sendmsg net/ipv4/udp.c | ip_build_xmit net/ipv4/ip_output.c | output_maybe_reroute net/ipv4/ip_output.c | ip_output net/ipv4/ip_output.c | ip_finish_output net/ipv4/ip_output.c ...

October 12, 2020 · 3 min · jiezi

关于tcp-ip:TCP三次握手调优

TCP(Transmission Control Protocol)传输控制协议是一种面向连贯的、牢靠的、基于字节流的传输层协定。从TCP的定义中能够看出,TCP是面向连贯的牢靠的通信形式,连贯单方都须要确定各自的连贯通道都是OK的。三次握手的目标就是为了确定各自的通道是OK的,同时告诉对方本人的起始SEQ。当客户端调用connect函数时便发送了SYN报文同时告诉对方本人的起始SEQ,从而发动第一次握手,客户端进入SYN_SENT状态;服务端收到SYN报文后,返回SYN+ACK报文到客户端同时告诉对方本人的起始SEQ,从而发动了第二次握手,服务端进入SYN_RCV状态;客户端收到服务端的SYN+ACK后,回复ACK报文,从而发动第三次握手,客户端进入ESTABLISHED状态;服务端收到ACK报文后服务端进入ESTABLISHED状态。自此三次握手就实现了,其流程图如下: TCP的三次握手过程如下: 客户端调优1、当客户端发动第一次握手的时候,如果迟迟收不到对方的应答,那么客户端会重试,重试的次数由/proc/sys/net/ipv4/tcp_syn_retries管制,默认值是5,重试距离是1,2,4,8,16,32,总共须要破费63s。能够依据客户端与服务端的网络情况以及服务端的负载,适当升高重试次数调小,如2次,从而出现异常的时候,客户端能够尽快感知到异样。 服务端调优1、当服务端发动第二次握手的时候,如果迟迟收不到对方的应答,那么服务端也会重试,重试的次数由/proc/sys/net/ipv4/tcp_synack_retries管制,默认值是5,重试距离是1,2,4,8,16,32,总共须要破费63s。同样的,如果客户端与服务器的网络情况挺好的,能够把重试次数调小。2、当服务端发动第二次握手后,会把连贯放入到半连贯队列,队列的大小由/proc/sys/net/ipv4/tcp_max_syn_backlog管制,默认大小是2048。当这个队列满时,服务器将无奈建设连贯。那么咱们怎么晓得这个队列是否有溢出呢?能够通过如下的命令看到 netstat -s | grep 'SYNs to LISTEN'75571 SYNs to LISTEN sockets ignored这个是个累计值,如果发现这个值一直的变大,能够把这个队列调大。同时还能够设置/proc/sys/net/ipv4/tcp_syncookies=1,关上tcp_syncookies性能。tcp_syncookies能够取如下的值:A. tcp_syncookies=0时,敞开syncookies性能,当半连贯队列满时,服务端将无奈建设连贯;B. tcp_syncookies=1时,当半连贯队列满时,服务端将启用syncookies性能;C. tcp_syncookies=2时,服务端将始终启用syncookies性能。tcp_syncookies的次要工作流程如下:服务端接管到SYN报文并返回TSYN+ACK报文时,不插入半连贯队列,而是依据这个SYN报文计算出一个cookie值。这个cookie作为将要返回的SYN ACK报文的初始序列号。当客户端返回一个ACK报文时,依据报文头信息计算cookie,与返回的确认序列号(初始序列号+1)进行比照,如果雷同,则是一个失常连贯,而后将连贯放入accept队列。如果通过netstat -lap发现SYN_RCV状态的连接不断的增长,那么就须要通过抓包工具剖析是不是产生了syn泛洪攻打,如果产生了泛洪攻打,须要通过防火墙阻止这种连贯。所谓的SYN泛洪攻打利用的是TCP的三次握手机制,攻打端利用伪造的IP地址向被攻打端发出请求,而被攻打端收回的响应报文将永远发送不到目的地,那么被攻打端在期待敞开这个连贯的过程中耗费了资源,如果有大量的这种连贯,主机资源将被耗尽,从而达到攻打的目标。3、当服务端收到第三次握手的ACK应答报文后,服务端会把连贯放入accept队列,accept队列由listen()函数传入的参数(参数的值能够通过ss -lnt命令的输入“Send-Q”列查看)与/proc/sys/net/core/somaxconn独特管制,取2者的小值。能够通过如下的命令查看是否由溢出: netstat -s | grep overflow75571 times the listen queue of a socket overflowed如果这个值一直的变大,阐明应用程序没有及时的调用accept函数接管连贯,能够先调高上文进步的2个参数。accept队列满后是否抛弃连贯,是由参数/proc/sys/net/ipv4/tcp_abort_on_overflow管制,默认是0。如果设置为1并且溢出,则发送RST报文敞开连贯。个别倡议设置为0,因为抛弃后,客户端如果发送了数据+ACK,因为等不到应答,那么就会反复发送数据+ACK,当服务端接管到ACK后,如果accept队列不满了,那么连贯就建设了。可见tcp_abort_on_overflow=0,能够进步TCP连贯建设胜利的概率。只有accept队列长期溢出的时候,才设置tcp_abort_on_overflow=1。4、另外还能够关上TFO性能,进步TCP连贯建设的效率,TFO详见文档:https://tools.ietf.org/html/r...https://www.cnblogs.com/passz...

October 5, 2020 · 1 min · jiezi

关于tcp-ip:TCP报文格式

TCP(Transmission Control Protocol)传输控制协议是一种面向连贯的、牢靠的、基于字节流的传输层协定。报文格式如下:1、源端口号、目标端口号同IP数据报中的源IP与目标IP惟一确定一条TCP连贯。2、序号(4字节)与确认序号(4字节):是TCP牢靠传输的要害局部。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。确认序号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据曾经正确无误的收到。确认序号只有当ACK标记为1时才无效。比方建设连贯时,SYN报文的ACK标记位为0。3、首部长度(4位):以4字节为单位,因为首部可能含有可选项内容,因而TCP报头的长度是不确定的,报头不蕴含任何可选字段则长度为20字节,4位首部长度字段所能示意的最大值为1111,10进制为15,15*4 = 60,故报头最大长度为60字节。4、保留:为未来定义新的用处保留,个别置0。5、管制位:URG ACK PSH RST SYN FIN,共6个,每一个标记位示意一个管制性能。1)URG:紧急指针标记,为1时示意紧急指针无效,为0则疏忽紧急指针。2)ACK:确认序号标记,为1时示意确认号无效,为0示意报文中不含确认信息,疏忽确认号字段。3)PSH:push标记,为1示意是带有push标记的数据,批示接管方在接管到该报文段当前,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。4)RST:重置连贯标记,用于重置因为主机解体或其余起因而呈现谬误的连贯。或者用于回绝非法的报文段和回绝连贯申请。5)SYN:同步序号,用于建设连贯过程。6)FIN:finish标记,用于开释连贯,为1时示意发送方曾经没有数据发送了,即敞开本方数据流。6、窗口:滑动窗口大小,用来告知发送端承受端的缓存大小,以此管制发送端发送数据的速率,从而达到流量管制。窗口大小是一个16bit字段,因此窗口大小最大为65535。7、校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包含 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。8、紧急指针:只有当 URG 标记置 1 时紧急指针才无效。紧急指针是一个正的偏移量,和顺序号字段中的值相加示意紧急数据最初一个字节的序号。 TCP 的紧急形式是发送端向另一端发送紧急数据的一种形式。9、选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连贯方通常都在通信的第一个报文段(为建设连贯而设置SYN标记为1的那个段)中指明这个选项,它示意本端所能承受的最大报文段的长度。另外也会保留2个4字节的工夫戳,包含本方的以后工夫戳与对端的承受到的最新工夫戳。选项长度不肯定是32位的整数倍,所以要加填充位,即在这个字段中退出额定的零,以保障TCP头是32的整数倍。

October 5, 2020 · 1 min · jiezi

关于tcp-ip:建议收藏TCP协议面试灵魂12-问

起源 | urlify.cn/rqumIn先亮出这篇文章的思维导图: TCP 作为传输层的协定,是一个IT工程师素养的体现,也是面试中常常被问到的知识点。在此,我将 TCP 外围的一些问题梳理了一下,心愿能帮到各位。 001. 能不能说一说 TCP 和 UDP 的区别?首先概括一下根本的区别: TCP是一个面向连贯的、牢靠的、基于字节流的传输层协定。 而UDP是一个面向无连贯的传输层协定。(就这么简略,其它TCP的个性也就没有了)。 具体来剖析,和 UDP 相比,TCP 有三大外围个性: 面向连贯。所谓的连贯,指的是客户端和服务器的连贯,在单方相互通信之前,TCP 须要三次握手建设连贯,而 UDP 没有相应建设连贯的过程。可靠性。TCP 花了十分多的功夫保障连贯的牢靠,这个可靠性体现在哪些方面呢?一个是有状态,另一个是可管制。TCP 会精准记录哪些数据发送了,哪些数据被对方接管了,哪些没有被接管到,而且保障数据包按序达到,不容许半点过错。这是有状态。 当意识到丢包了或者网络环境不佳,TCP 会依据具体情况调整本人的行为,管制本人的发送速度或者重发。这是可管制。 相应的,UDP 就是无状态, 不可控的。 面向字节流。UDP 的数据传输是基于数据报的,这是因为仅仅只是继承了 IP 层的个性,而 TCP 为了保护状态,将一个个 IP 包变成了字节流。002: 说说 TCP 三次握手的过程?为什么是三次而不是两次、四次?恋爱模仿以谈恋爱为例,两个人可能在一起最重要的事件是首先确认各自爱和被爱的能力。接下来咱们以此来模仿三次握手的过程。 第一次: 男: 我爱你。 女方收到。 由此证明男方领有爱的能力。 第二次: 女: 我收到了你的爱,我也爱你。 男方收到。 OK,当初的状况阐明,女方领有爱和被爱的能力。 第三次: 男: 我收到了你的爱。 女方收到。 当初可能保障男方具备被爱的能力。 由此残缺地确认了单方爱和被爱的能力,两人开始一段苦涩的恋情。 实在握手当然刚刚那段属于扯淡,不代表自己价值观,目标是让大家了解整个握手过程的意义,因为两个过程十分类似。对应到 TCP 的三次握手,也是须要确认单方的两样能力: 发送的能力和接管的能力。于是便会有上面的三次握手的过程: 从最开始单方都处于CLOSED状态。而后服务端开始监听某个端口,进入了LISTEN状态。 而后客户端被动发动连贯,发送 SYN , 本人变成了SYN-SENT状态。 ...

August 10, 2020 · 5 min · jiezi