TCP/IP,UDP协议详解

TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
TCP/IP协议族是由一个四层协议组成的系统,这四层分别为:应用层、传输层、网络层和数据链路层。

协议

TCP/IP基础知识

分组技术

  • 可以让多个用户共享一条线路

tcp/ip 代表什么

  • 利用 IP 进行通信时所必须用到的协议群的统称
    • RFC 协议的说明,STD 管理 RFC

互联网结构

  • 互联网由很多较小范围的网络组成,每个小网由骨干网和末端网组成

TCP/IP 协议分层模型

  • 物理层将二进制的0和1和电压高低,光的闪灭和电波的强弱信号进行转换
  • 链路层代表驱动
  • 网络层
    • 使用 IP 协议,IP 协议基于 IP 转发分包数据
    • IP 协议是个不可靠协议,不会重发
    • IP 协议发送失败会使用ICMP 协议通知失败
    • ARP 解析 IP 中的 MAC 地址,MAC 地址由网卡出厂提供
    • IP 还隐含链路层的功能,不管双方底层的链路层是啥,都能通信
  • 传输层
    • 通用的 TCP 和 UDP 协议
      • TCP 协议面向有连接,能正确处理丢包,传输顺序错乱的问题,但是为了建立与断开连接,需要至少7次的发包收包,资源浪费
      • UDP 面向无连接,不管对方有没有收到,如果要得到通知,需要通过应用层
  • 会话层以上分层
    • TCP/IP 分层中,会话层,表示层,应用层集中在一起
    • 网络管理通过 SNMP 协议

TCP/IP 分层模型与通信示例

  • 发包过程
    • 表示层转码,会话层决定何时建立连接,传输层负责建立连接,断开连接和发送数据,保证数据能顺利发送至对端。TCP 协议(传输层)在数据前附加一个首部,这个首部除了包含发送端和接收端地址以外,还包含序号,检验和(判断数据是否被破坏)。IP (网络层)模块将 TCP 传来的首部和数据当数据。加首部,这个首部中包含地址和上一层的协议。链路层除了添加首部,还会添加 FCS 到包尾
  • 收包过程
    • 链路层判断 MAC 地址,判断IP 协议。网络层做的事情差不多,在这里,对于有路由器的情况下,借助路由控制表,在找到应该送达的主句或路由器以后再转发数据。传输层检验数据是否被损坏,检验数据是否按照顺序发送,然后再做相同的事情

数据链路层

数据链路的作用

  • 链路层将数据集合为一个帧的块,然后进行传输
  • 只提供导线一端到另一端的传输

MAC 地址

  • Mac 地址长48比特,被烧入到网卡 ROM 中,不会重复

交换机

  • 交换机自学然后生成一张 Mac 表,具体原理为
    • 交换机4个端口连接着终端,A 终端与端口1连接,发送 frame 后交换机得知端口1和 A 终端的关系,然后转发到其他三端,转发完成后得知端口2与主机 B 想对应,记录到表中。以后主机 A 与主机 B 的通信就通过端口1和端口2进行

帧 frame

  • 帧是“一个数据链路层的传输单元,由一个数据链路层首部和其携带的分组所组成”。譬如说以太网帧,PPP 帧

以太网帧结构

帧结构

  • 一个帧以7个字节的前导码和1个字节的帧开始符作为帧的开始
  • 抱头包含源和目标的 Mac 地址和表明上一层网络协议的类型
  • 接下来是数据
  • 后面是帧验证序列,以验证帧是否损坏
  • 最后有一个帧间距,两个帧发送间要再发送至少12字节的空闲线路状态码

IP 协议

网络层作用

  • 跨越多种数据链路传输数据包
  • 提供路由和寻址功能

IP 地址

  • 每块网卡需配置至少一个 IP 地址
  • IP 地址由32位正整数组成,为二进制,但是为了人类更好的阅读,将他每8位分为一组,共4组
  • IP 地址由网络和主机两标识组成
    • 网络标识在数据链路的每个段配置不同的值,必须保证相互连接的端的地址不重复
    • 主机标识不允许在同一网段内重复
  • IP 地址分为四个级别,分别为 A, B, C, D
    • A类地址是首位为 0 开头,前八位是网络标识, 0.0.0.0 ~ 127.0.0.0属于 A 类
    • B 类地址是前两位由 10 组成,前16位是网络标识,128.0.0.0 ~ 191.255.0.0 属于 B 类
    • C 类地址前三位是 110, 前24位是网络标识,192.0.0.0 ~ 239.255.255.0 属于 B 类
    • D 类前四位是 1110,32位全是网络标识,224.0.0.0 ~ 239.255.255.255属于 D 类
  • 但是以上的分类已经不用,改为使用子网掩码定位网络标识长度。
    • 子网标识同一个网关,255.255.255.0和255.255.255.1是同一个子网
    • 子网掩码也是32位组成
    • 掩码中有几个1就代码几位网络标识,其他为主机标识
    • 假如掩码前24位为1,就代表前24位都为网络标识,用 IP 地址标识就是255.255.255.0,后面的0代表主机标识,理论上有256台主机可连接

路由控制

  • 仅有 IP 地址还不足以将数据包发送到对端,还需指明路由器或主机。保存这种信息的就是路由控制表。
  • 路由控制表中记录着地址与下一步要发送至路由器的地址。在发送 IP 包时,先确定 IP 包首部目标地址,然后在表中找到与该地址具有相同网络地址的记录,根据记录将 IP 包转发给相应的下一个路由器。

    IPv6

  • 地址长度为128位
  • 解决了很多 IPv4的问题
    • IP 地址扩大(目前 IPv4地址不足的问题由 NAT解决,NAT 是一种在 IP 数据包通过路由器或防火墙时重写源 IP 地址或目标地址的技术。这种技术被用于多台主机使用单个公有 IP 访问互联网的私有网络中。)
    • 包首部长度固定40字节,路由器不在做分片操作,直接在发送端主机分片
    • 不需 DHCP 服务器也能自动分配 IP地址
    • 使用认证和加密功能

IP协议相关技术

DNS

  • IP 地址不容易记忆,然后出现了域名。DNS 是将域名和 IP 地址相互映射的一个分布式数据库。
  • DNS 解析
    • 查询 www.baidu.com ,DNS 服务器会先检查自身缓存,有记录则返回结果
    • 记录不存在,DNS 服务器向根域名服务器查询,然后会返回.com 域的权威域名服务器地址
    • DNS 向 .com 服务器查询,得到 .baidu.com 地址
    • DNS 向 .baidu.com 服务器查询,得到最终地址,存入缓存并返回结果

ARP

  • 以太网协议规定两台主机相互通信必须知道目标主机 MAC 地址
  • 数据链路层会将上一层 IP 协议发来的 IP 地址转为 MAC 地址
  • 如果两台主机不在同一个局域网内,必须通过路由转发才能通信。此时,发送端通过 ARP 获得的 MAC 地址是一台可以通向局域网外的路由器的 MAC 地址
  • IPv6解析 MAC 地址通过 NDP

    NAT

  • 用于在本地网络中使用私有地址,连接互联网时转为全局 IP 地址的技术
    • 本地地址10.0.0.10要向163.221.120.9通信
    • NAT 路由器会将发送源地址从10.0.0.10转为全局 IP 地址202.244.174.37再通信
  • 当一个公有 IP 下有多台主机需要对外通信时,如果多台主机都使用相同的端口号会导致转为全局 IP 时数字一致,所有通过 NAPT 技术可以给转换端口号
    • NAT 路由器会自动生成 NAPT 的转换表,这个转换表可以正确转换地址和端口的组合
    • 在 TCP 中,简历 TCP 连接首次握手时的 SYN 包发出后就会生成表。在收到关闭连接时发出的 FIN 包时删除

TCP 与 UDP

传输层协议

  • TCP 和 UDP 是传输层的两个具有代表意义的协议.
  • TCP 是面向有链接的,可靠的协议,TCP 建立连接需要三次握手,断开连接需要四次握手.因为效率比不上 UDP 协议.但是 TCP 协议具有重发包,顺序控制等的机制。
  • UDP 是面向无连接的协议,不提供复杂的控制机制。做的最重要的事情就是分辨应用层协议。多用于视频音频通讯。
  • 传输层的作用是指出具体该把数据包发给哪个应用,通过端口来分辨应用。

端口号

  • 同一个端口不会同时出现,传输层通过辨认端口号来确认应用。但是只靠端口号识别通信是不够的。需要采取五个信息来识别一个通信,分别是源 IP 地址,目标 IP 地址,协议号,源端口号,目标端口号。两个包中只要任何一个信息不同就不是同一个通信。

TCP

三次握手建立连接

三次握手

  1. 客户端发送:SYN = 1, SEQ = X, 端口号
  2. 服务器回复:SYN = 1, ACK = X + 1, SEQ = Y
  3. 客户端发送:ACK = Y + 1, SEQ = X + 1

    确认应答信号ACK = 收到的SEQ + 1。 连接建立中,同步信号SYN始终为1。连接建立后,同步信号SYN=0。

三次握手

为什么不是两次握手
  • 两次握手就建立连接,假如主机 A 发送的 SYN 因网络问题迟迟没有到达主机 B,这时候会重发另一个 SYN 包给 B,当 A 接受到 B 的 ACK 包时建立连接。这时如果第一个 SYN 到达 B 时,主机 B 会认为主机 A 希望再次建立连接,会返回一个 ACK 包给 A。当 A 收到 ACK 时会抛弃掉这个包,因为 A 并不想建立连接,这时主机 B 认为连接已经建立,会一直等待主机 A 发送数据,这样会导致主机 B 的性能损耗。
四次挥手断开连接
  1. A向B提出停止连接请求,FIN = 1
  2. B收到,ACK = 1
  3. B向A提出停止连接请求,FIN = 1
  4. A收到,ACK = 1
优缺点
优点
  • 可靠,稳定 1、传递数据前,会有三次握手建立连接 2、传递数据时,有确认、窗口、重传、拥塞控制 3、传递数据后,会断开连接节省系统资源
缺点
  • 传输慢,效率低,占用系统资源高 1、传递数据前,建立连接需要耗时 2、传递数据时,确认、重传、拥塞等会消耗大量时间以及CPU和内存等硬件资源
  • 易被攻击 1、因为有确认机制,三次握手等机制,容易被人利用,实现DOS 、DDOS攻击
如何保证接收的顺序性
  • TCP协议使用SEQ和ACK机制保证了顺序性 TCP的每个报文都是有序号的。确认应答信号ACK=收到的SEQ+1

UDP协议

  • User Data Protocol,用户数据包协议
  • 面向无连接的协
  • UDP报头只有8字节
简介
  • 传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快的把它扔到网络上
  • 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制
  • 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段
  • 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息
  • UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小
  • 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制
  • UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表。
  • UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

    使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

优点
  • 传输速率快 1、传输数据前,不需要像TCP一样建立连接 2、传输数据时,没有确认、窗口、重传、拥塞控制等机制
  • 较安全 1、由于没有了TCP的一些机制,被攻击者利用的漏洞就少了
缺点
  • 不可靠,不稳定 1、由于没有了TCP的机制,在数据传输时如果网络不好,很可能丢包
用UDP协议通讯时怎样得知目标机是否获得了数据包
  • 仿造TCP的做法,每发一个UDP包,都在里面加一个SEQ序号,接收方收到包后,将SEQ序号回复给发送方。如果发送方在指定时间以内没有收到回应,说明丢包了。

TCP与UDP的区别

TCP面向有链接的通信服务 : UDP面向无连接的通信服务
TCP提供可靠的通信传输 : UDP不可靠,会丢包
TCP保证数据顺序 : UDP不保证
TCP数据无边界 : UDP有边界
TCP速度快 : UDP速度慢
TCP面向字节流 : UDP面向报文
TCP一对一 : UDP可以一对一,一对多
TCP报头至少20字节 : UDP报头8字节
TCP有流量控制,拥塞控制 : UDP没有

为什么UDP比TCP快
  1. TCP需要三次握手
  2. TCP有拥塞控制,控制流量等机制
为什么TCP比UDP可靠
  1. TCP是面向有连接的,建立连接之后才发送数据;而UDP则不管对方存不存在都会发送数据。
  2. TCP有确认机制,接收端每收到一个正确包都会回应给发送端。超时或者数据包不完整的话发送端会重传。UDP没有。因此可能丢包。
什么时候使用TCP
  • 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输
什么时候应该使用UDP
  • 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP
TCP无边界,UDP有边界
  • TCP无边界
    • 客户端分多次发送数据给服务器,若服务器的缓冲区够大,那么服务器端会在客户端发送完之后一次性接收过来,所以是无边界的;
  • UDP有边界
    • 客户端每发送一次,服务器端就会接收一次,也就是说发送多少次就会接收多少次,因此是有边界的。