ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

TCPIP协议

TCPIP协议 TCP/IP协议文章目录TCP/IP协议IPIP地址NAT原理IP协议TCP协议TCP报文头部三次握手四次挥手TCP完整通信全流程TCP/IP四层模型总结IP先来给大家讲讲IP协议IP是什么为什么叫IPIPInternet Protocol网际协议IP地址就是互联网上设备的地址编号用来在全世界网络里定位一台设备方便其他设备进行访问通过这个IP地址找到它。IP协议就是一套跨网络送信规则。为什么需要ip地址协议硬性规则操作系统整套网络内核只认一套寻址标准要和一个进程通信必须指明目标ip目标端口不论程序在本机还是别的电脑IP地址一台电脑本身只有两个本机IP地址环回127.0.0.1内网IP环回IP地址不走网卡不走路由器不出电脑一般用来进行本地测试127开头的ip地址一律本机内部闭环都可以用来进行本地测试而且很多用来解决同端口不冲突的问题靠不同环回ip地址格里多个项目内网ip地址是你连上wifi之后路由器自动给你分配的ip地址同一个局域网互相访问用只在局域网生效全世界有很多重复的内网ip地址可能连不同wifi的电脑的内网ip地址是一样的当电脑连接不同的wifi时电脑的内网ip地址也会跟着变化因为内网ip地址是全世界唯一的公网ip(路由器)给你分配的拔网线/断wifiping不通依赖物理网卡还有一个很重要的ip地址公网ip为什么公网ip不算电脑的ip地址根本原因就在于公网ip并不在电脑上而是在路由器上公网ip是运营商分配给路由器的地址你的电脑根本拿不到公网ip拓展0.0.0.0是什么不是真实ip代表本机全部网卡所有ip程序监听0.0.0.0本机能访问同局域网能访问外网能防问思考ip地址不是用来访问某个机器的端口某个机器的程序的吗不是要求ip地址需要是全球唯一的吗但是为什么内网ip全世界会有很多一样的呢这里就引入我们的NAT原理了NAT原理NAT:网络地址转换装在路由器里的功能主要是为了解决家里多个设备共用1个运营商公网ip上网解决公网IPV4地址不够用家里的所有设备都是192.168.x.x内网ip依靠NAT翻译成唯一的公网ip和外网进行通信所以路由器其实是不认识192.168.x.x/10.x.x.x/172.16-31这些内网ip的公网路由器不会转发私网ip数据包NAT核心工作流程1.电脑发包源ip:192.168.1.100源端口8888​ 目的ip百度公网180.101.49.11目的端口2222数据包发到路由器2.路由器NAT转换删掉源内网ip源端口用路由器自身公网ip做新源ip随机挑选一个空闲公网端口333在NAT映射表记下一条记录公网端口333-内网192.168.1.100:8888新数据包源ip路由器公网ip源端口333,目的不变发往百度百度回复数据发到路由器公网ip路由器再转回内网ip发给你的电脑所以外网全程看不到你的192.168内网ip只看见路由器公网ip所以内网ip全球重复没事IP协议是网络层规则规定了数据包怎么打包怎么跨路由器转发怎么找到目标主机IP一句话就是依赖ip地址寻址负责把数据包从一台电脑送到另一台电脑只管送到目的地就行不保证可靠送达IP协议4大缺点1.发包前不会和目标主机协商握手直接发送数据包2.传输不可靠断网、网络堵塞丢包后不重传不告知3.数据包路由路径不同到达乱序4.仅定位主机无法区分主机内部程序还是依靠TCP/UDP的端口号来区分不同软件进程IP协议干3件核心工作1.封装IP数据包传输层已经打包完毕应用数据TCP头部/UDP头部ip协议在这个整体外面再加一层ip首部生成完整ip数据包IP头部(源IP目的IPTTL协议号等字段)TCP/UDP头部真实业务数据协议号标记内部是TCP还是UDP对方拆ip头后知道把数据交给TCP还是UDP封装时机发数据时操作系统内核自动逐层封装不用手动拼接2.路由寻址、按照地址一站一站送转发逻辑靠目的ip路由表路由器内部存一张路由表表格记录某个ip地址下一个路由器地址分两种情况传输局域网内部跨互联网(1)同局域网两台电脑内网ip同网段不用经过网关路由器交换机直接内网转发。不走ip跨网络交换机是二层设备只识别MAC看不懂ip源电脑A会发送本机ARP广播帧ARP内容谁是192.168.1.20请你把你的MAC地址发给我192.168.1.10交换机转发给所有同网段设备(2)跨网段本机判断目标ip不在自家局域网把数据包发给路由器内网ip路由器查路由表根据目的ip选择下一个设备把包转发给隔壁运营商路由器经过所有骨干路由器重复查表转发一站一站经过各市各省运营商最终抵达目标服务器内网目标服务器拆ip包头向上发数据路径本机、家里路由器、小区运营商设备、省级骨干路由、百度机房路由、百度服务器只负责地址转发断网、阻塞直接丢包ip不会通知发送方丢包丢包补救交给上层TCP重传3.分片TTL防死循环分片这里涉及一个概念MTU以太网默认MTU1500字节代表二层链路单次最多成在1500字节ip数据包超过无法一次性传输所以什么时候会触发分片呢当ip总长度1500字节时ip协议自动把大包切割成多个分片小包每个分片单独封装ip头部主要依靠这3个字段来实现分片标识ID、MF标志位、片偏移接收方通过标识数字来分辨哪些分片属于同一组数据一组数据的分片的标识数字一样MF1表示后面还有分片MF0表示这是最后一个分片片偏移标识当前分片数据在原始大包中的起始位置接收方依靠这个来拼接还原数据包TTL也是一个新概念叫生存时间用来防止路由配置出错时的环路无限转圈A-B-C-A1字节数值linux默认64,数据包每经过一台路由器TTL-1当TTL减到0时当前路由器丢包不再继续转发总结IP地址互联网设备的编号用于全网定位设备IP协议一套跨网络传输数据包的通用规则IP是TCP/IP体系的网络层协议核心就是基于IP地址完成跨设备数据包投递只负责送到但是不保证数据质量是整个互联网路由转发的底层基石TCP协议传输控制协议工作在TCP/IP传输层搭建在IP协议上它专门来弥补ip无连接、不可靠、乱序、无法区分进程的所有缺点它可以1.通过端口号定位一台电脑里的具体程序2.建立专属通信连接实现可靠、有序、完整的数据连接3.控制流量和网络阻塞避免过载丢包TCP协议能做到这3点离不开很重要的一点TCP报文头部这里我们简单介绍一下报文头部如果大家想要进一步了解TCP报文头部请查看这篇博客#########TCP报文头部数据封装过后整体结构以太网帧头MACIP头部TCP头部真正数据TCP头部最小20字节最大60字节来讲几个核心常用字段1.源端口/目的端口用来实现第一点IP端口全网唯一通信端点2.序号给每一个传输的字节作唯一编号用于排序、丢包重传是实现可靠传输的核心3.确认号确认号是由目标方给发送方发的表示之前的数据全部接收完毕下次请从确认号开始发确认号已收到的最后一个字节序号14.窗口大小这是如何实现流量控制的核心告知发送方我接收缓冲区还能存多少字节来限制发送速度5.校验和校验TCP头部数据出错直接丢弃报文6.6个核心标志位1位二进制0/1开关标志位作用使用场景SYX请求建立连接三次握手ACK确认应答所有正常通信报文几乎都带ACKFIN请求断开连接四次挥手RST强制重置连接连接异常、强行断开PSH推送数据不缓存立即交给应用程序URG紧急数据优先处理TCP通过4来实现流量控制1来实现找到具体程序2、3、4来实现可靠传输如何实现可靠传输每一个字节数据都有唯一序号接收方收到数据后必须返回确认号发送方通过确认确认号判断哪些数据对方已经收到如何解决丢包发送方发出数据后其启动计时器如果规定时间没有收到ACK确认判定包丢失重新发送这部分数据如何解决重复接收网络延迟可能导致接收方收到两份一样数据TCP通过序号判断重复数据直接丢弃重复报文只保留一份如何解决到达顺序错乱根据序号重新排序如何控制流量依靠TCP头部窗口大小字段接收方每次回复ACK时附带剩余缓冲区大小发送方严格按照这个窗口值控制发送速度当窗口0时发送方立即停止发送直到接收方通知窗口恢复。TCP四种内置算法也用来控制拥堵慢启动、拥塞避免、快重传、快恢复慢慢试探网络承载能力拥堵了就主动降速三次握手TCP是面向连接的协议建立连接前会有一个操作三次握手三次握手干了什么同步双方初始序号协商连接参数完整流程1.第一次握手客户端-服务端​ 客户端发送报文SYN1请求建立连接并且待客户端初始序号ISN​ 2.第二次握手服务端-客户端​ 服务端回消息SYN1 ACK1携带服务端初始序号和确认号​ 3.第三次握手客户端-服务端​ 客户端发消息ACK1并回复确认号表示连接正式建立至此握手结束连接正式建立进入数据传输阶段四次挥手完整流程1.第一次挥手客户端-服务端​ 客户端发送FIN1:我不再发送新数据了请求关闭我方发送通道​ 2.第二次挥手服务端-客户端​ 服务端回复ACK1:我收到你申请关闭的请求了这时客户端就不再发送数据了但是服务端还可以继续向客户端发剩余数据​ 3.第三次挥手还是服务端-客户端​ 服务端的数据全部发送完毕了发送FIN1我这边也没有数据要发了请求关闭连接​ 4.第四次挥手客户端-服务端​ 客户端回复ACK1收到连接彻底关闭这里还有一个比较关键的细节TIME_WAIT第四次挥手后客户端不会立马关闭还会等待2ms保证最后一个ACK报文对方收到了避免服务端没收到然后一直重新发FIN等待残留的就数据包自然消失避免干扰新连接TCP完整通信全流程本机访问网页应用层(浏览器)生成请求数据传输层TCP:装TCP头部端口、序号、标志位网络层IP封装IP头部源/目的IP、TTL跨网路由转发内网数据包经路由器NAT转换私网IP转公网IP沿途路由器逐跳转发到达目标服务器服务器逐层解包拆IP- 拆TCP- 数据交给网页服务服务器返回数据TCP通过 序号 ACK超时重传保证可靠传输通信结束双方四次挥手断开TCP连接。TCP/IP四层模型从上至下依次应用层-传输层-网络层-网络接口层数据从上到下逐层加头部接收时从下到上逐层拆头部第一层应用层(面向用户/软件)给应用软件提供网络服务不负责传输只负责生成交互内容调用下层协议完成收发数据形式原始业务数据文本文件第二层传输层TCP/UDP端口层区分一台电脑的不同应用程序对数据做传输控制有TCP传输控制协议和UDP用户数据报协议TCP面向连接、可靠、字节流、三次握手建连接、四次回手断连接、序号ACK超时重传保可靠但是存在粘包UDP无连接不可靠开销小速度快无序握手直接发包不重传不排序有消息边界不粘包第三层网络层IP靠ip地址定位全网设备进行ip地址的搜索来进行数据的转发把数据包从一台电脑送到另一台电脑三大工作封装ip包、路由转发、分片TTL防环路四大缺点无连接、不可靠、不排序、不能区分进程第四层网络接口层硬件MAC层负责物理介质比如网线、wifi之类进行传输数据局域网内依靠MAC地址定位设备完成二层转发MAC地址网卡全球唯一物理地址仅在同一局域网生效硬件设备网卡、交换机等只识别MAC看不懂ip数据封装以太网帧头(源MAC、目的MAC)IP数据包总结简单来说IP负责找地址、转发数据包只管送到不管好坏、并不靠谱而TCP专门弥补IP的不足负责建立连接、保证数据靠谱不乱、不丢包。TCP加IP相互配合就是互联网通信的根本。
返回列表