zoukankan      html  css  js  c++  java
  • python网络编程part2

    TCP协议

    数据从客户端--->服务端的协议

    TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输程序。


    TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 而端口号为80,那么得到的套接字为192.3.4.16:80。

    三次握手建立连接

    如果你要去服务端下载视频,客户端和服务端之间必须得连接,连接就是三次握手:

    在连接之前客户端和服务端都是出于关闭状态的

    1. 客户端会像服务端发起一个请求,如下载视频,会有一个SYN报头

    2. 服务端会接收到客户端的请求,然后会响应客户端,并且把SYN报头改装好后又返回客户端,会有ACK的报头

    3. 客户端开始进入建立连接状态,再发一条请求,请求带上ACK给服务端,让服务端也进入连接转态

     

    • 1次

    1. 客户端直接进入连接状态,直接发送请求给服务端,直接进入连接状态

    • 2次

    1. 客户端暂不进入连接状态,发一条请求给服务端,

    2. 服务端直接进入连接状态,发送一条确定请求给客户端,客户端收到直接进入连接状态

    四次挥手关闭连接

    1. 客户端会发送请求带上FIN报头给服务端说我够了,要断开连接

    2. 服务端接收到客户端的请求后,返回一个带有ACK报头的请求说确认了

    1.FIN报头并没有返回; 2.但是服务端此时还有可能传输数据

    1. 服务端数据传输结束之后,服务端又会发送一次带报头FIN的请求,告诉客户端我所有数据都发完了,结束吧

    如果只有三次连接,但是客户端可能在第二次连接后死掉了,客户端压根没有接收到第2-3步之间的数据传输,然后服务端是发送给你了请求

    1. 所以必须得有第四次,客户端像服务端进行一次确认,我收到了你中途发的数据

    粘包问题

    tcp'协议才会有粘包问题,udp协议没有粘包问题

    res=subprocess.Popen(cmd.decode('utf-8'),
    shell=True,
    stderr=subprocess.PIPE,
    stdout=subprocess.PIPE)
    

     同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包。

    基于tcp协议特点的黏包现象成因 

     

    黏包现象只发生在tcp协议中:

    1.从表面上看,黏包问题主要是因为发送方和接收方的缓存机制、tcp协议面向流通信的特点。

    2.实际上,主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的

  • 相关阅读:
    从Ecma规范深入理解js中的this的指向
    js中继承的几种用法总结(apply,call,prototype)
    缓存 Array.length 是老生常谈的小优化
    spark app
    source code spark
    spark dev by IDEA
    编译spark-0.9.1
    图解GIT,ZT
    Spark分布式安装
    倒排索引(Inverted Index)
  • 原文地址:https://www.cnblogs.com/legend27/p/11089937.html
Copyright © 2011-2022 走看看