乐趣区

关于c:Linux网络开发必学教程7TCP-与-UDP

TCP/IP 分层构造

  • 应用层:各个应用程序能够定义(应用)各种这样的协定
  • 传输层:确保收回的数据可能达到目标主机,实现数据传输
  • 网络层:填写数据包地址,抉择数据传输门路
  • 数据链路层:交融不同连贯形式的链路,屏蔽网络差别
  • 物理层:具体连贯形式,有线,无线,光纤 …

TCP/IP 工作形式

TCP/IP 层次结构的特点

  • 下层依赖邻接上层的能力,上层只为间接邻接下层服务
  • 下层不晓得上层的工作机制,上层不论下层传输的数据内容
  • 不做跨层服务,层次结构中的角色缺一不可

深刻了解网络层(IP 层)

  • IP 寻址:IP 地址属于网络层地址,用于标识网络上的主机
  • 路由管制:控制数据如何达到主机(如:须要通过哪些路由器转发)
  • 无连贯:数据包依据 IP 地址在网络上传递(无需与指标主机建设连贯)
Mac 地址:数据链路层所应用的硬件地址
Mac 地址与网络无关,出厂时写入到网络设备中
当主机从网络上每收到一个数据帧时,首先检查数据中的 MAC 地址。如果是发往本机的数据帧则收下,之后进行其余的解决;否则就将此帧抛弃,不再进行其余的解决。

IP 地址和 MAC 地址

  • IP 地址是动静的,不属于某个具体的硬件(MAC 地址隶属于具体硬件)
  • IP 地址是网络层应用的地址(用于跨网络投递数据包)
  • MAC 地址是数据链路层应用的地址(用于确定指标网络中接收数据的主机)
  • 路由器中记录了本网络中主机 IP 地址与 MAC 地址的映射关系(ARP 协定实现)

IP 路由管制

  • 为了将数据发给指标主机,所有主机都保护着一张路由表
  • 路由表记录了 IP 数据包下一步应该发给哪个路由器

IP 数据转发

  • IP 包转发用的是”尽力服务“策略

    • ”尽力服务“指”会致力“,但不保障后果
    • 转发时会通过附加信息检查数据合法性,但出现异常不会进行重发
    • 以包为单位进行转发,不保障达到(收回之后,石沉网海)

TCP/IP 网络层次结构是否能提供牢靠数据传输?

传输控制协议(Transmission Control Protocol)

  • TCP 在协定实现上提供牢靠数据传输

    • TCP 不存在”数据包“的概念,实现了流式传输(数据如流水,无头无尾)
    • TCP 外部有服务状态,可能准确晓得数据是否曾经发送胜利,是否被接管 …
    • TCP 在行为上 可进行阻塞管制(网络环境变差时,可能调整数据发送速度)

TCP 连贯建设

问:三次交互完结后,建设连贯,为什么是三次?
答:避免旧的反复连贯引起连贯凌乱问题

比方在网络环境比较复杂的状况,客户端可能会间断发送屡次申请。如果只设计成两次握手的状况,服务端只能一接管申请,而后返回申请信息,也不晓得客户端是否申请胜利。这些过期申请的话就会造成网络连接的凌乱。所以设计成三次握手的状况,客户端在接管到服务端 SEQ+ 1 的返回音讯之后,就会晓得这个连贯是历史连贯,所以会发送报文给服务端,通知服务端。所以 TCP 设计成三次握手的目标就是为了防止反复连贯。而后能够设计成四次握手?五次握手?不能够?答案是也是能够的,不过为了节俭资源,三次握手就能够符合实际状况,所以就没必要设计成四次握手、五次握手等等状况

TCP 的天生缺点(DDoS 攻打)

  • 客户端收到 SYN,ACK 之后,不再回复最初的 ACK 音讯
  • 这将导致服务端耗费资源,但并不会理论进行通信
  • 当多个傀儡客户端同时对服务端进行”连贯申请“,服务端资源将耗尽

TCP 连贯断开

问:四次交互完结后,连贯断开,为什么是四次?
答:因为 TCP 是全双工通信的

第一次挥手: 当被动方发送断开连接的申请(即 FIN 报文)给被动方时,仅仅代表被动方不会再发送数据报文了,但被动方仍能够接收数据报文。第二次挥手: 被动方此时有可能还有相应的数据报文须要发送,因而须要先发送 ACK 报文,告知被动方“我晓得你想断开连接的申请了”。这样被动不便不会因为没有收到应答而持续发送断开连接的申请(即 FIN 报文)第三次挥手: 被动方在解决完数据报文后,便发送给被动方 FIN 报文;这样能够保障数据通信失常牢靠地实现。发送完 FIN 报文后,被动方进入 LAST_ACK 阶段(超时期待)。第四挥手: 如果被动方及时发送 ACK 报文进行连贯中断的确认,这时被动方就间接开释连贯,进入可用状态。

UDP 的特点:齐全继承网络层工作形式

  • 无需连贯,间接指定 IP 地址和端口即可发送数据
  • 监听固定端口,只有有数据,通通接管
  • 不论网络状况,只有有数据通通可发送
  • 不关怀数据是否达到

UDP 的应用场合

  • 对数据不敏感,须要实时性的场合(如:直播,实时游戏)
  • 网络环境比拟好的场合(如:物联网家居)
  • 须要深度定制协定的场合(如:”不丢包的“UDP 协定)

TCP 与 UDP 的区别

  • TCP: 瓶口到嘴上了吗?瓶口到嘴上了吗?瓶口到嘴上了吗?好,给你喝水。
  • UDP:给你给你都给你,我懒得管你喝不喝失去。

退出移动版