1.TCP协议的概述:
TCP协议属于计算机网络体系中的运输层,运输层的任务是负责向主机中应用层进程之间的通信提供通用的数据传输服务.所以可以通俗的理解TCP协议就是进程间数据通讯传输协议
2.TCP协议的特点:
TCP协议本身是比较复杂的,它包含拥塞控制,可靠传输,流量控制,连接管理等功能
1)TCP是面向连接的协议
2)TCP连接是点对点的,每一条TCP连接只能有两个端口,这个端口就是我们JAVA网络编程中所使用的套接字,由ip地址和端口号组成
3)TCP连接提供可靠交付
4)TCP连接是双向的通信
5)TCP面向字节流传输数据
3.TCP报文格式:
TCP数据报由两部分组成:TCP首部和TCP数据部分
1)TCP首部:包含许多控制和描述字段.是TCP全部功能的体现
2)TCP数据部分:封装后的字节流序列,是应用层进程交付的数据
4.TCP报文首部:
1)源端口和目的端口:分别是进程双方的端口号
2)序号seq:本报文发送数据的第一个字节的序号
3)确认号ack:期望收到对方的下一个报文段的第一个数据字节的序号
5.TCP的三次握手建立连接的过程
1)第一次握手:客户端TCP进程也先建立传输控制块TCB,然后向服务端发送连接请求报文段,此时SYN=1,随机选定一个初始序号seq=x,,此报文不能携带数据,但是要消耗掉一个序号,发送完毕后,客户端进入SYN-SENT(同步已发送)状态
2)第二次握手:服务端收到客户端请求连接报文段后,若同意建立连接,则发送确认报文,确认报文中SYN=1、ACK=1,确认号ack=x+1,同时随机选定一个自己序号seq=y,确认报文段同样不能携带数据,但是也要消耗掉一个序号,发送完毕后服务端进入SYN-RCVD(同步收到)状态
3)第三次握手:客户端收到确认报文后,检查ACK=1,ack=x+1是否正确,若正确,则向服务端发送确认报文,确认报文中ACK=1,ack=y+1,seq=x+1,发送后进入ESTAB-LISHED状态,服务端收到确认报文后,也进入ESTAB-LISHED状态,此时双方TCP连接正式建立。
6.关于TCP三次握手就是client与server在相互确认各自发送和接收是否正常的过程:
1)第一次握手:client—>server,server确认了cilent的发送能力和自己的接收能力是正常的
2)第二次握手:server—>client,client确认了自己的发送能力和server的接收能力是正常的,但是server此时不清楚自己的发送能力是否正常
3)第三次握手:client—>server,server确认了自己的发送能力正常,同时也表明双方也都确认完毕,可以开始传输数据。