`
tjuxiaoqiang
  • 浏览: 25994 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Linux 网络通信

阅读更多

客户端TCP状态迁移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服务器TCP状态迁移:
CLOSED->LISTEN->SYN_RECV ->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
各个状态的意义如下:
LISTEN - 侦听来自远方TCP端口的连接请求;
SYN-SENT -在发送连接请求后等待匹配的连接请求;
SYN-RECV - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求;
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
CLOSING - 等待远程TCP对连接中断的确认;
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;


• 当客户端开始连接时,服务器还处于LISTENING,
• 客户端发一个SYN包后,他就处于SYN_SENT状态,服务器就处于SYN_RECV状态,
• 然后互相确认进入连接状态ESTABLISHED.

• 当客户端请求关闭连接时,客户端发送一个FIN包后,客户端就进入FIN_WAIT_1状态,等待对方的确认包,
• 服务器发送一个ACK包给客户,客户端收到ACK包后结束FIN_WAIT_1状态,进入FIN_WAIT_2状态,等待服务器发过来的关闭请求,
• 服务器发一个FIN包后,进入CLOSE_WAIT状态,
• 当客户端收到服务器的FIN包,FIN_WAIT_2状态就结束,然后给服务器端的FIN包给以一个确认包,客户端这时进入TIME_WAIT,
当服务器收到确认包后,CLOSE_WAIT状态结束了,
这时候服务器端真正的关闭了连接.但是客户端还在TIME_WAIT状态下,

什么时候结束呢.我在这里再讲到一个新名词:2MSL等待状态,其实TIME_WAIT就是2MSL等待状态,
为什么要设置这个状态,原因是有足够的时间让ACK包到达服务器端,如果服务器端没收到ACK包,超时了,然后重新发一个FIN包,直到服务器收到ACK 包.TIME_WAIT状态等待时间是在TCP重新启动后不连接任何请求的两倍.
大家有没有发现一个问题:如果对方在第三次握手的时候出问题,如发FIN包的时候,不知道什么原因丢了这个包,然而这边一直处在FIN_WAIT_2状态,而且TCP/IP并没有设置这个状态的过期时间,那他一直会保留这个状态下去,越来越多的FIN_WAIT_2状态会导致系统崩溃.

建立连接协议(三次握手)
• 客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。
• 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
• 客户端必须再次回应服务端一个ACK报文,这是报文段3。
连接终止协议(四次握手)
  由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
• TCP客户端发送一个FIN,用来关闭客户端到服务器的数据传送(报文段4)。
• 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
• 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
• 客户端发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

[root@localhost ~]# man netstat
State
The state of the socket. Since there are no states in raw mode
and usually no states used in UDP, this column may be left
blank. Normally this can be one of several values:
ESTABLISHED
The socket has an established connection.
SYN_SENT
The socket is actively attempting to establish a con-nection.
SYN_RECV
A connection request has been received from the net-work.
FIN_WAIT1
The socket is closed, and the connection is shutting down.
FIN_WAIT2
Connection is closed, and the socket is waiting for a
shutdown from the remote end.
TIME_WAIT
The socket is waiting after close to handle packets still in the network.
CLOSED
The socket is not being used.
CLOSE_WAIT
The remote end has shut down, waiting for the socket to close.
LAST_ACK
The remote end has shut down, and the socket is closed.
Waiting for acknowledgement.
LISTEN
The socket is listening for incoming connections. Such
sockets are not included in the output unless you spec-
ify the --listening (-l) or --all (-a) option.
CLOSING
Both sockets are shut down but we still don’t have all
our data sent.
UNKNOWN
The state of the socket is unknown.

转自:http://blog.chinaunix.net/uid-7177878-id-321841.html
分享到:
评论

相关推荐

    嵌入式Linux网络通信程序开发.pdf

    嵌入式Linux网络通信程序开发 本篇论文主要讨论了基于Linux操作系统的嵌入式网络通信程序开发,特别是基于AX88796网卡驱动程序的开发。文章首先介绍了当前网络的重要性和嵌入式系统的发展趋势,然后详细分析了Linux...

    linux 网络通信实例

    在实际应用中,Linux网络编程还需要考虑错误处理、多线程或异步处理来应对多个并发连接,以及网络层的其他复杂问题,如IP包路由、网络拥塞控制等。同时,还可以利用套接字选项和协议族中的其他功能,如设置超时、...

    基于ARM9的嵌入式Linux网络通信系统设计与实现.pdf

    基于 ARM9 的嵌入式 Linux 网络通信系统设计与实现 本文主要介绍了基于 ARM9 的嵌入式 Linux 网络通信系统的设计与实现。该系统使用 $3C2410 微处理器和 Linux 操作系统,实现了服务器和客户端的网络通信。本文首先...

    实验三、嵌入式Linux网络通信实验

    2. 掌握TCP套接字服务器端与客户端通信方法,实验箱和Ubuntu进行TCP通信。 三、实验原理 1.TCP协议与UDP协议 TCP协议(传输控制协议)是面向连接的通信协议,TCP提供两台计算机之间的可靠无差错的数据传输。应用...

    嵌入式Linux网络通信的实现.pdf

    本文将详细介绍嵌入式 Linux 网络通信的实现,包括嵌入式系统的概念、以 S3CA510B 为核心的嵌入式网络通信系统的组成结构、嵌入式 Linux 操作系统网络通信应用软件设计的算法流程,以及在该系统平台上进行网络通信的...

    TCP.zip_DEMO_LINUX TCP _linux 网络通信_linux 网络_linux 网络编程

    在Linux系统中进行网络通信,TCP(Transmission Control Protocol)是一种常用且可靠的传输协议。本教程主要探讨如何在Linux环境下利用TCP进行网络编程,通过提供的"TCP.zip_DEMO_LINUX TCP _linux 网络通信_linux ...

    Linux网络通信 socket应用编程知识点总结含例程

    Linux 网络通信 socket 应用编程知识点总结含例程 Linux 网络通信 socket 应用编程是指在 Linux 操作系统中使用 socket 编程来实现网络通信的技术。socket 是一种网络编程接口,提供了一个创建网络套接字的方法,...

    Linux网络调试助手

    Linux网络调试助手(网络通信)Linux网络调试助手(网络通信)Linux网络调试助手(网络通信)Linux网络调试助手(网络通信)Linux网络调试助手(网络通信)Linux网络调试助手(网络通信)Linux网络调试助手(网络...

    Linux网络通信详解

    ### Linux网络通信详解 #### 一、引言 随着互联网的发展和普及,网络通信成为现代生活中不可或缺的一部分。作为开源操作系统的佼佼者,Linux凭借其强大的网络功能,在服务器领域占据了主导地位。本章节将深入探讨...

    第21章Linux网络通信高级编程Socket.pdf

    【Linux网络通信高级编程Socket】章节主要探讨了在Linux环境下如何进行高级的网络通信编程,特别是使用Socket进行TCP/IP通信。Socket是网络编程的核心概念,它代表了一个通信端点,结合IP地址和端口号,用于标识网络...

    ARM在嵌入式Linux网络通信平台中的应用

    ### ARM在嵌入式Linux网络通信平台中的应用 #### 一、ARM体系结构概述 **ARM**(Advanced RISC Machines)是一种基于精简指令集计算(RISC)原则设计的微处理器架构。ARM架构因其高性能、低功耗、低成本等特点,在...

    ARM在嵌入式Linux网络通信平台中的应用.pdf

    【ARM在嵌入式Linux网络通信平台中的应用】 嵌入式系统是当今计算机科学的重要领域,而ARM处理器在其中扮演着关键角色。ARM(Advanced RISC Machines)是一种精简指令集计算(RISC)架构的处理器,以其高效能、低...

    基于ARM9的嵌入式Linux网络通信系统设计与实现.doc

    在这种情况下,无法直接提供有关"基于ARM9的嵌入式Linux网络通信系统设计与实现"的具体知识点。通常,这个主题会涵盖以下几个方面: 1. **ARM9架构**:ARM9是ARM公司的一种微处理器内核,广泛用于嵌入式系统。它...

    LINUX 网络通信引擎中间件

    血与荣誉网络通信引擎2013PT1-2.4.2.1001 Build1231 集成了LINUX下的 TCP UDP 服务器模型,包括 EPOLL ET LT,SELECT,POLL 还包含了LINUX 系统API 资源API 基础库 算法库 客户端开发包等等,与网络相关的功能集成。 ...

    linux_socket_thread.zip_linux 网络通信_linux 网络通信_多线程socket

    在Linux系统中,网络通信是通过套接字(Socket)接口来实现的,这是一种标准的进程间通信(IPC)机制,常用于实现客户端与服务器之间的数据交换。在本压缩包"linux_socket_thread.zip"中,包含的是一个使用C语言编写...

    Linux_Socket_Example.rar_Linux C socket_linux 网络通信_linux sock

    在IT领域,网络通信是至关重要的,特别是在操作系统如Linux中,它提供了丰富的API来实现不同进程间或跨网络的...因此,这个“Linux_Socket_Example”压缩包对于任何想要深入学习Linux网络编程的人来说都是宝贵的资源。

    Linux网络通信编程socket

    通过学习为后续Linux网络编程奠定基础。首先介绍网络编程的概念,即网络协议分层,旨在帮助读者对网络建立初步的、全面立体的认识,其次介绍包括协议、端口、地址等;最后介绍应用非常广泛的传输控制协议...

    linux网络通信引擎c/c++

    它是一个跨平台,稳定可靠的网络通信引擎。你可以在这套引擎上面快速的部署你的网络应用程序环境。此引擎不光封装了高性能API函数,还封装了底层网络IO和网络应用与协议相关接口,你可以使用此SDK快速部署与开发大型...

    tcp_client.zip_LINUX TCP _TCP通信_linux 网络通信_linux tcp client_lin

    1. **套接字API**:在Linux中,TCP通信基于套接字API,它是操作系统提供的用于网络通信的接口。创建TCP客户端的第一步是调用`socket()`函数创建一个套接字描述符,这通常使用`AF_INET`作为地址家族和`SOCK_STREAM`...

Global site tag (gtag.js) - Google Analytics