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

2020-02-11  本文已影响0人  oasis_m

声明:所有文章只作为学习笔记用,转载非原创
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

上一篇下一篇

猜你喜欢

热点阅读