网络通信是两台计算机上的两个进程之间的通信
    用Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。
    TCP/IP简介
    IP地址对应的实际上是计算机的网络接口,通常是网卡
    IP协议负责把数据从一台计算机通过网络发送到另一台计算机。
    数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路。
    因此,路由器就负责决定如何把一个IP包转发出去。
    IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。
    TCP协议则是建立在IP协议之上的。
    TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。
    TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。
    许多常用的更高级的协议都是建立在TCP协议基础上的,比如用于浏览器的HTTP协议、发送邮件的SMTP协议等。
    两个进程在两台计算机之间建立网络连接就需要各自的IP地址和各自的端口号
    TCP编程
    Socket是网络编程的一个抽象概念。
    通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可
    UDP编程
    TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。
    使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。
    虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议