zoukankan      html  css  js  c++  java
  • TCP/IP协议族,http

    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,如果收到看就是发送成功了,没有就是数据丢失,会重发。

    窗口控制  发送端不能一直发送数据给接收端,接收端处理能力有限。       

  • 相关阅读:
    Retrofit2.0+OkHttp设置统一的请求头(request headers)
    Retrofit、Okhttp使用小记(cookie,accesstoken,POST
    quartz持久化部署实现
    支付宝支付-常用支付API详解(查询、退款、提现等)
    支付宝支付-提现到个人支付宝
    Git 版本还原命令
    CEF JS实现获取剪贴板图片的DataURL
    CEF 自定义用户协议(scheme)实现以二进制流的方式显示图片、视频、音频
    CEF C++调用前端js方法展示传递过来的图片数据
    C++读写图片数据转成Base64格式
  • 原文地址:https://www.cnblogs.com/lhh666/p/11530186.html
Copyright © 2011-2022 走看看