美文网首页
重点 : TCP 请结合socket 原理看 ——SYN、ACK

重点 : TCP 请结合socket 原理看 ——SYN、ACK

作者: oasis_m | 来源:发表于2020-02-11 10:14 被阅读0次

    声明:所有文章只作为学习笔记用,转载非原创
    linux 下获取socket fd数量

    lsof
    https://www.cnblogs.com/sparkdev/p/10271351.html

    https://blog.csdn.net/qq_30464257/article/details/81192028

    close_wait
    https://blog.csdn.net/yu616568/article/details/44677985

    Socket原理讲解
    https://blog.csdn.net/pashanhu6402/article/details/96428887

    对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:

    1.     什么是TCP/IP、UDP?
      
    [https://www.jianshu.com/p/8cb4b1f2afb3](https://www.jianshu.com/p/8cb4b1f2afb3)
    
    UDP (用户数据包协议User Datagram
    Protocol)  
    TCP(Transmission Control Protocol传输控制协议)是一种面向连接的,可靠的,基于字节流的传输通信协议。
    1、TCP是面向连接的(在客户端和服务器之间传输数据之前要先建立连接),UDP是无连接的(发送数据之前不需要先建立连接)
    2、TCP提供可靠的服务(通过TCP传输的数据。无差错,不丢失,不重复,且按序到达);UDP提供面向事务的简单的不可靠的传输。
    3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性比较高的通讯或广播通信。随着网速的提高,UDP使用越来越多。
    4、没一条TCP连接只能是点到点的,UDP支持一对一,一对多和多对多的交互通信。
    5、TCP对系统资源要去比较多,UDP对系统资源要求比较少
    6、UDP程序结构更加简单
    7、TCP是流模式,UDP是数据报模式 
    
    1.     Socket在哪里呢?
      
    socket.png
    1.     Socket是什么呢?
      

    ···
    明白socket只是对TCP/IP协议栈操作的抽象,而不是简单的映射关系,这很重要!

    https://www.cnblogs.com/sparkleDai/p/7604876.html

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
    accept函数返回的新socket其实指代的是本次创建的连接,而一个连接是包括两部分信息的,一个是源IP和源端口,另一个是宿IP和宿端口。所以,accept可以产生多个不同的socket,而这些socket里包含的宿IP和宿端口是不变的,变化的只是源IP和源端口。这样的话,这些socket宿端口就可以都是80,而Socket层还是能根据源/宿对来准确地分辨出IP包和socket的归属关系,从而完成对TCP/IP协议的操作封装!而同时,放火墙的对IP包的处理规则也是清晰明了,不存在前面设想的种种复杂的情形。
    ···

    1.     你会使用它们吗?
      
    [https://blog.csdn.net/pashanhu6402/article/details/96428887](https://blog.csdn.net/pashanhu6402/article/details/96428887)
    
    open—write/read—close
    
    1、服务器创建监听socket
    2、与对外服务的端口号绑定
    3、开始listen
    4、客户端连接到服务器对应的port
    5、服务器accept为新的客户端产生新的socket
    6、基于这个新的socket与客户端交换数据。
    从以上流程来看,最大值为65535的“端口号”这个重要的东东,我们只用了一次,就是执行bind的时候!而以后创建的socket,说白了就是一个可以进行网络IO操作的HANDLE而已。通过查看该HANDLE的RemoteEndPoint能查看到远程客户端连接的IP和端口号(注意,该端口是远程客户端的端口),查看该HANDLE的LocalEndPoint能看到该Socket的Ip和端口就是该服务绑定的IP和端口。所以,accept的socket值与端口号无关,又何来65535的“理论”上限?
    
    

    20190718154451958.png

    icmp和igmp

    [https://www.jianshu.com/p/4bd8758f9fbd?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation](https://www.jianshu.com/p/4bd8758f9fbd?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation)
    
    icpm是一个测试连通性的协议,最常用的就是ping命令应该知道吧,igmp是个组播协议,在发出组播的时候才会用到~明白?
    
    ICMP协议是指英文全称(Internet Control Message Protocol),就是网际控制信息协议。ICMP工作在TCP/IP体系中的网络层,是IP协议的一个补充,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。
    
    而IGMP协议是指英文全称(Internet Group Management Protocol),网络组管理协议。主要用于建立和管理多播组,对IP分组广播进行控制。
    

    三次握手Three-way Handshake
    SYN (Synchronize)
    连接复位Resetting a connection
    DOS (Denial of Service)攻击

    *SYN:同步标志
    同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
    *ACK:确认标志
    确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
    *RST:复位标志
    复位标志有效。用于复位相应的TCP连接。
    *URG:紧急标志
    紧急(The urgent pointer) 标志有效。紧急标志置位,
    *PSH:推标志
    该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
    *FIN:结束标志
    带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据
    三次握手Three-way Handshake

    相关文章

      网友评论

          本文标题:重点 : TCP 请结合socket 原理看 ——SYN、ACK

          本文链接:https://www.haomeiwen.com/subject/eubtfhtx.html