Python学习——TCP协议、端口学习

1.TCP协议的处理方式[传输控制协议,特点,特性,使用场景]

TCP:Transmission Control Protocol传输控制协议,TCP是一种面向连接的、可靠的、基于字节流的传输层(Transport layer)通信协议。

·TCP是因特网中的传输层协议,使用三次握手协议建立连接、四次挥手断开连接

··三次握手

1.PNG

seq是序列号,这是为了连接以后传送数据用的,ack是对收到的数据包的确认,值是等待接收的数据包的序列号。SYN:同步序列编号(Synchronize Sequence Numbers)。

第一次握手:建立连接时,客户端发送syn包(syn=1)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=1),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。


捕获.PNG

特点:(1)TCP是面向连接的传输层协议,应用程序在使用TCP之前,必须先建立TCP传输连接

(2)每一条TCP连接只能有两个端点,TCP连接只能是点对点的

(3)TCP提供可靠交付的服务

(4)TCP提供全双工通信

(5)面向字节流,TCP不像UDP那样一个个保温独立的传输,而是在不保留报文边界的情况下以字节流方式传输。

使用场景:在对网络通信质量要求较高时,需要使用TCP协议进行通信。

2.什么是网络?

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

3.什么是IP?

网络之间互连的协议(IP)是Internet Protocol,所谓IP地址就是给每个连接在互联网上的主机分配的一个32位地址。网络互联协议就是为了多台计算机能够在网络中互联通信而设计的协议,是能够使得网络上工作的任意一台计算机可以和其他计算机之间实现网络通信的一套通用规则,任何计算机制造商生产的计算机必须遵循这套规则的情况下,就可以接入现行的网络实现联网通信的功能。

2.PNG

A类地址

(1)A类地址第1字节为网络地址,其它3个字节为主机地址。它的第1个字节的第一位固定为0.

(2)A类地址网络号范围:1.0.0.0---126.0.0.0

(3)A类地址中的私有地址和保留地址:

① 10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。

范围(10.0.0.0---10.255.255.255)

② 127.X.X.X是保留地址,用做循环测试用的。

B类地址

(1) B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。它的第1个字节的前两位固定为10.

(2) B类地址网络号范围:128.0.0.0---191.255.0.0。

(3) B类地址的私有地址和保留地址

① 172.16.0.0---172.31.255.255是私有地址

② 169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。

191.255.255.255是广播地址,不能分配。

C类地址

(1)C类地址第1字节、第2字节和第3个字节为网络地址,第4个字节为主机地址。另外第1个字节的前三位固定为110。

(2)C类地址网络号范围:192.0.0.0---223.255.255.0。

(3) C类地址中的私有地址:

192.168.X.X是私有地址。(192.168.0.0---192.168.255.255)

D类地址

(1) D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。

(2) D类地址范围:224.0.0.0---239.255.255.255

E类地址

(1) E类地址不分网络地址和主机地址,它的第1个字节的前五位固定为11110。

(2) E类地址范围:240.0.0.0---255.255.255.254

4.端口

计算机端口(port),是计算机与外界通信的接口。

TCP/IP协议中的端口,端口号的范围为0~65536。

端口号根据其使用场景,一般区分为公用端口、动态端口、保留端口

公用端口:0~1023

动态端口:1024-65536

保留端口:一般是unix系统中超级用户进程分配保留端口号


3.PNG

5.协议

协议(protocal),是多方协商计议之后得出的约定、规范、规则

通常情况下为了让工作在网络中的多台计算机之间能有好的完成不同软件的数据的通信,出现了互联网数据传输协议的概念,通过协议的约束,不同地域环境的计算机可以通过网络完成流畅的数据交互。

OSI/RM模型

4.PNG

应用层:提供应用程序之间的通信

表示层:梳理数据格式、数据加密

会话层:建立、维护、管理会话

传输层:建立主机端到端连接

网络层:寻址和路由选择

数据链路层:提供介质访问、链路管理等

物理层:比特流二进制传输

网络编程:重点
1.网络概述、IP地址、PORT端口

·网络概述:由若干结点和连接这些结点的链路组成。
将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
·IP地址:
网络之间互连的协议(IP)Internet Protocol,是为计算机网络相互连接进行通信而设计的协议。IP地址具有唯一性,根据用户性质的不同,可以分为5类。

2.网络协议、OSI/RM模型、协议族

·网络协议:协议(protocal),是多方协商计议之后得出的约定、规范、规则
通常情况下为了让工作在网络中的多台计算机之间能有好的完成不同软件的数据的通信,出现了互联网数据传输协议的概念,通过协议的约束,不同地域环境的计算机可以通过网络完成流畅的数据交互。
·ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI
·协议族:

3.TCP协议、UDP协议

TCP协议:Transmission Control Protocol传输控制协议,TCP是一种面向连接的、可靠的、基于字节流的传输层(Transport layer)通信协议。
UDP协议:UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。

4.python TCP/UDP编程

Python TCP编程:

服务端

定义服务器地址信息
创建SOCK_STREAM类型的套接字对象
bind服务器并listen端口
accept等待客户端的接入
接入之后的send/recv数据交互
服务器要关闭的情况下close关闭套接字释放资源

'''TCP服务端'''
#导入需要的模块
import socket

#定义数据
HOST = ''
PORT = 8080
ADDRESS = (HOST,PORT)

#定义数据读写缓冲字节大小
BUFFER = 1024

#建立一个套接字对象
tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#绑定主机
tcp_socket.bind(ADDRESS)

#监听
tcp_socket.listen(5)

#循环
while True:
    print("等待连接···")
    socket_server, addr = tcp_socket.accept()
    print("连接成功···",addr)

    while True:

        info = input("请输入消息:")
        socket_server.send(info.encode('utf-8'))

        msg = socket_server.recv(BUFFER)
        print("接受的信息为:",msg.decode('utf-8'))
        if msg == 'BYE':
            socket_server.close()
            break

客户端:

定义主机数据
定义接收数据缓存大小
定义一个套接字对象
连接主机
收发消息

'''TCP客户端'''
import socket

#定义主机数据
TARGET_HOST = '192.168.45.1' #自己的ip地址
TARGET_PORT = 8080
ADDRESS = (TARGET_HOST,TARGET_PORT)
#定义接收数据缓存大小
BUFFER = 1024

#定义一个套接字对象
tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#连接主机
tcp_client.connect(ADDRESS)

while True:
    msg = tcp_client.recv(BUFFER)
    print("收到的信息为:",msg.decode('utf-8'))

    info = input("请输入要发送的信息:")
    tcp_client.send(info.encode('utf-8'))

    if info == 'BYE':
        tcp_client.close()
        break
print("退出客户端")
PythonUDP编程:服务端:

定义服务器地址信息
定义数据缓存大小
创建套接字对象
等待连接,接连后收发消息

'''UDP服务端'''
#导入依赖的模块
import socket

#定义数据
HOST = ''
PORT = 8081
ADDRESS = (HOST,PORT)
BUFFER = 1024

#创建一个udp套接字对象
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

#绑定主机
udp_socket.bind(ADDRESS)
print('等待连接')

while True:
    #接收消息
    msg,addr = udp_socket.recvfrom(BUFFER)
    try:
        print(addr,"发送的消息为:",msg.decode("utf-8"))
    except:
        print(addr,"发送的消息为:" ,msg.decode("gbk"))

    #发送消息
    info = input("《服务器》请输入消息:")
    udp_socket.sendto(info.encode('utf-8'),addr)

    if info == 'BYE':
        udp_socket.close()
        break

客户端:
定义主机地址
定义数据缓存大小
发送消息(发送消息时要加上地址,目标主机的地址)

'''udp客户端'''
import socket

TARGET_HOST = '192.168.13.61' #自己的ip地址
TARGET_PORT = 8081
ADDRESS = (TARGET_HOST,TARGET_PORT)
BUFFER = 1024

#在客户端创建一个udp套接字对象
udp_client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

while True:

    # 发送消息
    info = input('<客户端>请输入消息:')
    udp_client.sendto(info.encode('utf-8'),ADDRESS)

    if info == 'BYE':
        udp_client.close()
        break

    #接收消息
    msg,addr = udp_client.recvfrom(BUFFER)
    print(addr,"从服务端接收到的消息为:",msg.decode('utf-8'))


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,592评论 2 57
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,051评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 读懂了TCP/IP协议,也就基本了解的网络通信原理。本文是参照研究生教材《网络安全原理与应用》里面的内容加上自己实...
    Super超人阅读 21,879评论 1 19
  • 协议基础 协议就是计算机之间通过网络实现通信时实现所达成的一种“约定”,这种约定使得那些由不同厂商的设备,不同的C...
    d9fc24a0c9a9阅读 2,353评论 0 6