tcp简介

传输层为其上面的应用层提供通讯服务,它属于面向通信的最高层,也属于面向用户应用的最底层,所以非常重要!

ip层作用于主机间(定位至主机),而传输层作用于应用进程间(定位至端口),端到端通信就是指两个应用进程间的通信。发送端中应用层传来的报文由传输层统一处理,接收端中传输层传来的报文会分发给不同的应用程序。

传输层使用16位来标识一个端口(共有65535个端口可用),这里的端口是一个逻辑结构,与路由器的物理端口不一样。该端口只在本计算机中有效,在互联网中是无意义的,它用于联系运输层和应用层(不使用进程号做联系是因为不同os的进程号规范可能不一样,而且一个进程可能开有多个端口)。

tcp是面向字节流的,应用传下来的的报文,tcp并不认识,tcp只将其看做是字节流,如果字节流大了就分段,如果小了可以先缓存等累计到一定大小后再发送。接收方tcp同样只认识字节流,将收到的字节流传至应用进程。(这需要在应用层区分字节流了,比如http通常会有length首部)

TCP报文段的首部格式

ACK=1表示该报文段包含确认序号(ack),只有在tcp三次握手的首次请求中ACK=0;

SYN=1表示该报文段用于同步序号,只有在tcp三次握手的前两次握手中SYN=1(两次握手之后,双方就会各持有一对序号,一个是自己的,另一个是对端的);

FIN=1表示该报文段为终止报文段,即向对端表示我不再发送数据给你了(但我还可以接收你发送的数据);

窗口字段表示当前可接收的最大字节数,是动态变化的;

确认号ack表示已收到对端到ack-1为止的所有数据;

客户端状态的变迁:关闭->同步已发送->连接已建立;

服务端状态的变迁:关闭->监听->同步已接受->连接已建立;

通常都是客户端主动请求

客户端状态的变迁:连接已建立->终止等待-1->终止等待-2->时间等待->关闭

服务端状态的变迁:连接已建立->关闭等待->最后确认->关闭

以java socket编程为例,serverSocket监听8181,clientSocket绑定8282,clientSocket.close后双方tcp的状态如下图(可通过netstat -ano查看),serverSocket处于CLOSE_WAIT,clientSocket处于FIN_WAIT_2。此时,对于java Socket来说,clientSocket已不能再发送数据(应用程序将clientSocket标记为closed,os Socket底层也关闭了发送通道),serverSocket读取数据只会读到-1,虽然可以发送数据,但clientSocket已经无法再接收了(因为被标记为closed,可能其他语言此时还可以接收数据)。也就是说,对于java而言,一端关闭了,另一端就会只有关闭的份了,不能再传输数据了。

当serverSocket.close后,serverSocket持有的临时端口被关闭,只剩下处于TIME_WAIT状态的clientSocket的8282端口,经测试TIME_WAIT状态会持续很长时间,所以通常建议client端主动进行关闭,如果server端主动关闭,会存在大量的端口处于TIME_WAIT状态,剩余可用端口就变少了。

(如果长时间维持clientSocket关闭、serverSocket开启的状态,即client为FIN_WAIT_2,server为CLOSE_WAIT,最后二者都会关闭,这是什么原因呢?)

CLOSE_WAIT、FIN_WAIT_2、TIME_WAIT这三个状态较容易捕捉,其他状态都是瞬间状态,不容易捕捉到。

时间: 2024-10-14 04:25:26

tcp简介的相关文章

传输控制协议TCP

1.TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP是运输层的重要协议,运输层是位于IP层之上,应用层之下的中间层.应用层向运输层发送用于网间传输的.用8位字节表示的数据流,然后运输层把数据流分区成适当长度的报文段.之后运输层把结果包传给IP层,由它来通过网络将包传送给接收端实体的运输层.为了保证不发生丢包,给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收.然后接收端实体对

TCP为何采用三次握手来建立连接,若采用二次握手可以吗

1. TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的.可靠的.基于IP的传输层协议,采用三次握手确认建立一个连接. TCP为了保证报文传输的可靠[1],就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收.然后接收端实体对已成功收到的字节发回一个相应的确认(ACK):如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传. 2. TCP协议三次握手过程分析 TCP是主机

TCP状态迁移图浅析(转载)

一.TCP简介        TCP提供一种面向连接的,可靠的字节流服务.面对连接意味着两个使用TCP的应用,在彼此交换数据之前必须先建立一个连接.TCP通过以下方式提供可靠性:     1. 应用数据被分割成TCP认为最适合发送的数据块,由TCP传递给IP的信息单位成为报文段.      2. 当TCP发出一个段后,它就启动一个定时器,等待目的端确认收到这个报文段.如果不能及时收到一个确认,将重发这个报文段.     3. 当TCP收到TCP连接另一端的数据,它将发送一个确认.这个确认不是立即

JAVA 通过 Socket 实现 TCP 编程

简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP,下一篇博客会实现)是同一层内 另一个重要的传输协议.在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层.不同主机的应用层之间经常需要可靠的.像管道一样的连接,但是I

九、Socket之TCP编程

TCP简介 TCP是Transmission Control Protocol(传输控制协议)的简称,是TCP/IP体系中面向连接的运输层协议,在网络中提供全双工的和可靠的服务. TCP最主要的特点: (1)是面向连接的传输层协议: (2)每个TCP连接只能有两个端点,而且只能一对一通信,不能一点对多点直接通信. (3)通过TCP连接传送的数据,能保证数据无差错.不丢失.不重复地准确到达接收方,并且保证各数据到达的顺序与数据发出的顺序相同. (4)数据以字节流的方式传输. (5)传输的数据无消息

linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现

1 TCP简介 tcp是一种基于流的应用层协议,其"可靠的数据传输"实现的原理就是,"拥塞控制"的滑动窗口机制,该机制包含的算法主要有"慢启动","拥塞避免","快速重传". 2 TCP socket建立和epoll监听实现 数据结构设计 linux环境下,应用层TCP消息体定义如下: typedef struct TcpMsg_s { TcpMsgHeader head; void* msg; }TcpM

黑马程序员 网络编程 UDP与TCP

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ----------------------/* 网络编程分为两种模式:TCP和UDP 连接互联网的计算机以亿计,为了唯一的标识出每台电脑,互联网就给每台电脑分配一个 唯一独立的ip地址,通过这个ip地址就可以进行计算机之间的数据交换 我们计算机交换的数据功能我们在java中把它封住成一个叫Socket的类, 简称套接字, 端口号:计算机数据的交换一般都是电脑上的程序来维护的,而电脑上又运

tcp入门(唐唐的故事)

1,互联网的实现,分成好几层.每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持.把互联网分成五层,容易让人理解. 2,对这五层的理解(唐唐讲故事): 实体层:目的就是把计算机连接起来,用电气信号传输0,1 链路层:指定一套规则或方法来解析0和1.他包含一些规定,比如几个01凑一组,这一组01代表什么意思.-->最初基本上每家公司都有自己的分组方式,太乱了,这样就好比一个不懂英文的而中国人和老外对话.完全不在一个频道.这个时候一个类似语言协会的人出来了,说国际语言一英语问标准.这就是以太

第二章 传输层:TCP、UDP和SCTP

//1. IPv4 : 网际协议版本4.使用32位地址.IPv4给TCP.UDP.SCTP.ICMP.IGMP提供分组递送服务. IPv6 : 网际协议版本6.使用128位地址.IPv6给TCP.UDP.SCTP.ICMPv6提供分组递送服务. TCP/IP协议概况: IP协议: //2. UDP简介: UDP是一个简单的传输层协议,应用进程往一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报中, 该UDP数据包又被封装入一个IP数据报,然后发送至目的地.UDP不保证其数据报会到达