TCP/IP不是单指一种传输协议,而是一组传输控制协议/互联网协议。
(计算机网络中,实际应用的网络协议是TCP/IP协议族,TCP/IP的应用层大体上对应着OSl/RM模型的应用层、表示层和会话层,TCP/IP的网络接口层对应着OSI/RM的数据链路层和物理层,而传输层和网络层在两个模型中对应得很好。)
其分层关系如下图
面向连接的,可靠的,基于字节流的传输层通信协议;
网络地址统一分配,网络中每一设备和终端都具有一个唯一地址;
TCP/IP不依赖于任何特定的计算机硬件或操作系统,提供开放的协议标准等。
TCP报文段首部包含:
序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号
确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号
确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0
终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
TCP三次握手:
1.客户端向客户端发出请求报文段。(SYN=1,seq=x)
2.服务端若同意客户端的请求,则发回确认报文。(SYN=1,ACK=1,ack=x+1,seq=y)
3.客户端收到确认报文之后,通知上层应用进程连接已建立,并向服务器发出确认报文,其首部:ACK=1,ack=y+1。当服务器收到客户端的确认报文之后,也通知其上层应用进程连接已建立。(ACK=1,ack=y+1)
TCP四次挥手:
1.数据传输结束以后,客户端的应用进程发出连接释放报文段,并停止发送数据。(FIN=1,seq=u)
2.服务器端收到连接释放报文段之后,发出确认报文。(ack=u+1,seq=v)
3.若服务器已经没有要向客户端发送的数据,其应用进程就通知服务器释放TCP连接。(FIN=1,ACK=1,seq=w,ack=u+1)
4.客户端收到连接释放报文段之后,必须发出确认释放请求,然后TCP连接才真正结束。(ACK=1,seq=u+1,ack=w+1)
特点:
面向非连接,不维护连接状态,可以同时向多个客户端传输相同的消息
数据包报头只有8个字节,额外开销小
吞吐量只受限于数据生成速率,传输速率以及机器性能等
报文结构:
简介:
HTTP协议是应用层的超文本传输协议,是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
特点:
支持客户/服务器模式
简单快速且灵活
无连接(无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间)
无状态
消息结构:
客户端请求消息:(包含请求行,请求头部,空行,请求数据)
服务端响应消息:(包含状态行,消息报头,空行,响应正文)
更多相关知识可以查看上一篇博客:https://www.cnblogs.com/ywb-articles/p/10633270.html
原文:https://www.cnblogs.com/ywb-articles/p/11143423.html