网络传输协议(UDP和TCP的一些理解)

网络通信

UDP

1.1 网络通信的概念 两台机器进行通信

1.2 ip地址

    1.1 什么是地址
	    
        飞秋通信能够准确的给想要的人发送消息每个人都有一个唯一的ip地址
		
		ip地址:目的用来标记网络上的一台电脑
		
	1.2 ip地址的作用
         
        ip地址在网络上标识唯一电脑			 
				
	1.3 查看ip地址
	
	    windwos:cmd(快捷键windows + R)->ipconfig
		
		linux:ifconfig(ctrl + a 快速回到行首)
		
	1.4 ip的分类
        
		192.168.33.xx 前三组是网络号 后一组是主机号(但是不是绝对的)
		
		最大值是255(所以理论上有一个局域网最多有256个机器,一般情况下满足不了)
          		 
	1.5 端口号
	
	    一台机器上程序的唯一标识
		
		进程

        一个程序运行起来就是一个进程(运行起来的程序)
        
        端口是怎样分配的:
            
            知名端口:80 端口分配了给HTTP 21 端口分配给FTP				
		
	1.6 socket:网络通信(今天所有的网络通信都是用socket)
	    
		套接字:(插排,插口)


		注:因UDP不常用 就不代码演示了



TCP

    TCP 协议:传输控制协议	

   区别: 

    UDP:写信模型(不需要建立连接世界发送数据,每一封信都需要写上ip、端口号,不是很安全,数据有可能丢) 

    TCP:打电话模型	是在建立连接的基础上才会发送数据(数据一般不会丢失)


    TCP 通信步骤:

              1. 创建连接

              2. 数据传送

              3. 终止连接


    TCP 可靠传输机


    TCP 客户端 

             所谓的服务器:就是提供服务的一端,而客户端,就是需要服务的一端


             代码演示:(Python版本 注意格式问题)

def main():             
# 1. 创建tcp的套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 连接服务器
server_ip = input("请输入需要连接的服务器ip")
server_port = int(input("请输入需要连接的服务器port"))
server_addr = (server_ip, server_port)
tcp_socket.connect(server_addr)
#tcp_socket.connect(("192.168.20.58", 8080))

# 3. 发送/解释数据
send_data = input("请输入要发送的数据")
tcp_socket.send(send_data.encode("utf-8"))

# 4. 关闭套接字
tcp_socket.close()

if name == ‘main’:
main()

TCP 服务器


生活中的电话机(例子)

如果想让别人能够正常的给你打通电话,需要你做以下几件事情:

    1. 买个手机

    2. 插上电话卡

    3. 设计手机为正常的接听状态

    4. 静静的等着别人给你打电话

tcp 

和上面打电话的流程是一样的 在程序中,如果想要完成一个tcp服务器的功能,流程如下:

    1. socket 创建一个套接字

    2. bind 绑定 ip 和 port

    3. listen 使套接字变为可以被动链接

    4. accept 等待客户端吧链接

    5. recv/send 接收发送数据


 TCP客户端和服务器通信的原理(自己的理解)
 
 首先服务器创建一个监听套接字,这个套接字主要用来负责监听客户端请求
 当客户端发送请求,监听套接字会生成一个新的套接字用来和客户端进行通信


 代码演示(Python版本)

 import socket

def main():
# 1. socket 创建一个套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#  2. bind 绑定ip和port
tcp_socket.bind(("", 7890))

#  3. listen 使套接字变为可以被动链接
tcp_socket.listen(128)

#  4. 等待客户端进行链接
new_client_socket, client_addr = tcp_socket.accept()

#  5. 接收客户端的请求

recv_date = new_client_socket.recv(1024)

#  6. 回送数据给客户端
new_client_socket.send("hahahaha".encode("utf-8"))

#  7. 关闭
tcp_socket.close()
new_client_socket.close()

if name == ‘main’:
main()

猜你喜欢

转载自blog.csdn.net/weixin_39361197/article/details/85274251