TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。
TCP/IP协议族是一个网络通讯模型,客户端和服务端的通信过程是基于它的,是一整个网络传输的协议家族,为网际网络的基础架构通信。
TCP/IP协议的组成,四层
- 应用层。向用户提供应用服务时候的活接口。负责传送各种最终形态的数据。应用层的主要工作就是定义数据格式并按照对应的格式解读数据。(HTTP请求-响应协议、SMTP、DNS、FTP、POP3、Telnet)
- 传输层。负责传输文本数据。(TCP传输控制协议、UDP用户数据报协议等)传输层的主要工作是定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性。
- 网络层。分配地址和传输二进制数据。(IP协议等IP,ICMP,IGMP,ARP,RARP)
- 数据链路层(网络接口层)
TCP/IP协议在一定程度上参考OSI的体系结构,OSI参考模型(即开放式系统互联),七层
图片:https://www.cnblogs.com/wxd0108/p/7687298.html
HTTP协议
HTTP协议,超文本传输协议,是处在应用层的协议,由请求和响应构成,且是无状态的协议,明文传输没加密(https有加密),Http协议承载在TCP协议上,基于TCP/IP通信协议传输数据(HTML资源,图片资源),。
无状态协议:对于事务处理没有记忆,无状态意味着如果后续处理需要前面的信息但是没有记录,无法处理。可以通过CooKie和Session绘画保存信息。
http组成,请求报文和响应报文,请求报文:请求行,请求首部字段,请求内容实体;响应报文:状态行,响应首部字段,响应内容实体;
GET和POST
GET请求,用GET传输数据,数据会附在URL之后,以?分格URL和传输数据,多个参数用&链接。传输的数据大小受到URL长度限制。只支持ASCII字符,中文可能乱码。
POST请求,用POST传输数据,POST会把数据放置在HTTP包的包体中。传输大小无限制。用POST更安全。支持标准字符流,可以正确传递中文字符。
TCP协议
UDP 只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份,所以有时候它被认为是不可靠的数据包协议,但是它也有优点,
无需建立连接,减少了延迟;头部开销小,传输效率高。
TCP 相对UDP则是面向连接的,可靠的,基于字节流的“长连接”的传输层通信协议。(TCP是全双工)
面向连接 就是在传输数据之前,客户端和服务端需要先建立连接才能传输数据,建立连接需要经过三次发包确认连接(三次握手)。
三次握手
客户端发起连接,询问服务端并发送一个SYN(客户)包给服务端;
服务端收到询问和SYN(客户)包,服务端回复询问返回确认ACK(服务)包,并再发起询问和SYN(服务)包;
客户端收到服务端的确认和询问后 ,回复询问返回确认ACK(客户)包;然后客户端服务端就可以进行数据传输了。
问题:
TCP的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗?
回答:
答:建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。
(1)TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。
(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
(3)采用两次握手不行,原因就是上面说的失效的连接请求的特殊情况。
重发超时 在重新发送数据之前,如果在等待确认应答的特定的时间间隔内没有收到确认应答,就会进行数据重发。(tcp会计算出合适的时间间隔,不会无限重发,一定次数后会关闭连接)
应答机制 TCP中,接收端收到发送端的数据时会返回一个已经收到消息的通知(确认应答(ACK)),这也是TCP可靠的原因之一。
发送端将数据发送之后等待接收端的ACK,如果收到看就是发送成功了,没有就是数据丢失,会重发。
窗口控制 发送端不能一直发送数据给接收端,接收端处理能力有限。