网络协议详解TCP/UDP(1)

简介----伊始

  • 本人从事互联网行业并非太久非技术大佬,但是也是自学成才一路磕磕绊绊每天都在为第二天去努力,渐渐的忘了自己的初心以及编程的乐趣但是因为今年特殊原因使我冷静,决定不定期的整理资料推送以及帮后人去解决问题,去开发一些简化代码的开源项目,希望你们不要向我一样的不易,也可以加我微信可以免费给你们提供一些可用资料;
  • 废话不多说,这次文章讲解tcp,udp帮助各位更好的理解,可以应对面试的问题

TCP

概述

  • 面向连接,可靠,基于字节流的通信协议;
  • 将应用层的数据流分割成报文段并发送给目标节点的tcp层
  • 数据包都有序号,对方收到则返回ACK,未收到则重传;
  • 使用校验和来确认数据在传输过程中是否有误
  • TCP不包含ip但会有源端口和目的地端口

TCP报文头

网络协议详解TCP/UDP(1)_第1张图片

  • 源端口,目的地端口各占两个字节(通信的重点是应用进程之间,本地是根据pid,跨服务器就是tcp+ip+端口号)
  • SequenceNumber序号:占4字节传输的每个字节都是有序号的且都是按顺序去编号,如一段报文从101始携带100个字节;下一个报文段就是101+100始
  • 数据偏移量距离起始的报文有多远
  • window:滑动窗口,用来告知发送端和接受端缓存大小
  • CheckSum校验和:以16位进行存储;发送端进行计算,客户端校验
  • Urgent Pointer:紧急指针URG为1时当前指针才有效;
  • TCPFlags:有八个标志位
    1.URG:紧急指针标志;为1时有效为0时忽略
    2.ACK:确认序号标志,为1时有效为0时无效;
    3.PSH:push标志,同上,当带有push标志位的数据会尽快被应用处理,不会在缓冲区排队
    4.RST:重置链接标志,重置由于主机宕机等一系列错误的链接,或拒绝一些非法的报文端和错误的请求
    5.SYN:同步序列号;用于建立链接过程,当syn=1 ACK=0,代表没有使用捎带的确认域,使用则是ACK=1;
    6.FIN:finish,用于释放链接,为1时代表发送方已经没有数据可以发送;

    三次握手流程图

    网络协议详解TCP/UDP(1)_第2张图片

    • 1.第一次握手:被称为SYN的报文段不携带数据,但需消耗掉一个序号,且req是一个正整数;
    • 2.第二次握手:同样不携带数据,确认报文
    • 3。第三次握手:最后一次确认,TCP建立链接,可以携带数据
    • TCP三次握手的原因:初始化SequenceNumber序号值;为保证不会因为网络传输而导致乱序;
    • 首次握手存在SYN超时的隐患,及server收到Client的SYN。回复时却无法收到ACK确认Server会不断重试直至超时,linux默认超时时间时63s;易导致SYNFlood攻击;措施:当SYN队列满后通过tcp_syncookies参数回发SYNCookie(包含源端口,目标地端口,时间戳作为seq的值);若为正常链接的client会回发SYNCookie,直接建立链接
    • TCP设有保活机制,当client忽然断线会向对方发送保活探测报文,直到发送数达到阈值则断开链接

时间太晚了,下次会继续持续更新;
望诸君砥砺前行,勿忘初心;
祝各位事业有成,佳人相伴;

你可能感兴趣的:(http,https,java,后端)