7. TCP连接的特点,TCP连接如何保证安全可靠的?
TCP连接的主要特点
1、面向连接型的传输协议
TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播(multicast)和广播(broadcast)传输方式。
2、传输单位为数据段
TCP仍采用传统的“数据段”作为数据传输单元。由于数据段大小受应用层传送的报文大小和所途经网络中MTU值大小决定,所以每次发送的TCP数据段大小是不固定的。
3、仅一种TPDU格式
4、支持全双工传输
TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。
5、TCP连接是基于字节流的,而非报文
TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。
6、每次发送的TCP数据段大小和数据段数都是可变的
在TCP中,因为每次发送多少字节的数据不是固定的,也不是由主机当前可用缓存决定的,而是根据双方给出的窗口大小和当前网络的拥塞程度决定的,所以每次可以发送的TCP数据大小是不固定的。
TCP连接如何保证可靠性
1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。
2、当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
3、当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 。
4、 TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
5、既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
6、既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
7、TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
8. TCP与UDP的区别
TCP:传输控制协议
UDP:用户数据报协议
1、TCP是面向连接的协议,UDP是无连接协议;
2、TCP提供可靠的服务,UDP尽最大努力交付,即不保证可靠交付;
TCP丢包会自动重传,UDP不会。
3、TCP有序,UDP无序;
消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会。
4、TCP无界,UDP有界;
TCP通过字节流传输,UDP中每一个包都是单独的。
5、TCP有流量控制(拥塞控制),UDP没有;
主要靠三次握手实现。以及慢开始、拥塞避免、快重传、快恢复
6、TCP传输慢,UDP传输快;
因为TCP需要建立连接、保证可靠性和有序性,所以比较耗时。这就是为什么视频流、广播电视、在线多媒体游戏等选择使用UDP。
7、TCP是重量级的,UDP是轻量级的;
TCP要建立连接、保证可靠性和有序性,就会传输更多的信息,如TCP的包头比较大。
8、TCP需要更多资源,UDP则要好上很多;
9、应用场合不同:TCP一般应用在对可靠性要求比较高的场合,例如http,ftp等等。而UDP一般应用在对实时性要求较高场合,例如视频直播,大文件传输等等;
9. get和post的区别?什么情况下用到?
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET和POST有一个很大的区别就是,GET产生一个TCP数据包;POST产生两个TCP数据包。
10. http2与http1的区别?
主要区别
1、HTTP/2采用二进制格式而非文本格式
比起像HTTP/1.x这样的文本协议,二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少。
2、HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
HTTP/1.x 有个问题叫线端阻塞, 它是指一个连接一次只提交一个请求的效率比较高, 多了就会变慢。 HTTP/1.1 试过用管线化来解决这个问题, 但是效果并不理想(数据量较大或者速度较慢的响应, 会阻碍排在他后面的请求). 此外, 由于网络媒介和服务器不能很好的支持管线化, 导致部署起来困难重重。而多路传输能很好的解决这些问题, 因为它能同时处理多个消息的请求和响应; 甚至可以在传输过程中将一个消息跟另外一个掺杂在一起。所以客户端只需要一个连接就能加载一个页面。
3、使用报头压缩,HTTP/2降低了开销
4、HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
服务器推送服务通过“推送”那些它认为客户端将会需要的内容到客户端的缓存中,以此来避免往返的延迟。