(TCP / IPプロトコル/ソケット含む)ネットワークプログラミング

01、ネットワーク通信の概要
1.ネットワークとは何ですか?
単純な意味は、ネットワークは、補助二重またはオペレータの⼀種類以上の再生⽅で⼯と⼀よりも接続することができることです。

ネットワークの正式な定義は以下のとおりです。

ネットワークは複数のノードによって接続されて構成され、多数のオブジェクトとそれらの相互接続を表すリンクノードです。

1999年前に、ネットワークの構造がランダムであると仮定しました。しかし、Barabasiとし、ワットた後、1999年にスケールフリーとスモールワールドネットワークで発見され、彼らの発見は、世界的に有名に掲載された「科学」、「ネイチャー」誌とネットワークの複雑ことに気づいた男セックス。[1]

ネットワークは、テキスト読み上げ、写真表示、ビデオ再生、ダウンロード、送信、ゲーム、チャットや他のソフトウェアツールを助ける人々にテキスト、画像、サウンド、ビデオ、などの点で、非常に豊かな生活とより良い楽しさをもたらします。

図2に示すように、我々は、オブジェクト・ネットワークの使用
に複数⽅使用し、次に進み、即ち、別の⼀⽅⼀⽅からのデータ転送と通信するためのリンク。

リンクに結合することができ、複数の⽅オープンネットワークを使用して、データ転送をしながら行うことができます

:オープンネットワークは、以下のように異なるコンピュータ上のソフトウェアは、プロセス間、すなわち、⾏に通信データを転送することができるように、プログラムされている
ここに画像を挿入説明
TCP / IPプロトコル、02
1、ネットワーク通信プロトコルのどのれる
ネットワーク通信プロトコルは、共通のネットワークであります異なるオペレーティングシステムとインターネットのさまざまなハードウェアアーキテクチャの接続のための言語サポートの通信、ネットワークは世界共通語です。
たとえば、私たちの日常生活の中で、一部の人々が英語を話す、と一部の人がファイルを言って、一部の人々はドイツ語を話す、異なる言語にあなたを解決するために、異なる人種間の交換に言語と同じ種類の⼀フェイスの言語、ではないが⾏言いましたそれらの人々の間であなたの言語とコミュニケーションの障壁は、今や国際使用して、ある言語と英語、⼀提供、プロトコルです提供します。
別の例として、ネットワークオペレータとユーザコンピュータ、メインフレーム通信、異なる文字セットを使用して、2台のデータ端末ので、したがってオペレータコマンドが入力はお互いを知りません。通信するために、各文字の所定のセット後に各端末マストは、第1端子文字の文字集合に変換し、宛先端末後、伝送ネットワークに入る前に、標準文字セットの文字に変換され、。これにより、ネットワーク通信プロトコルはまた、言語は、ネットワーク上の各コンピュータ間で通信することを理解することができます。
一般的なネットワーク通信プロトコルは、以下のとおりです。TCP / IPプロトコル(最も一般的)、IPX / SPXプロトコル、NetBEUIプロトコル。
2. TCP / IPプロトコルは何
TCP / IP(伝送制御プロトコル/インターネットプロトコル、 伝送制御プロトコル/インターネットプロトコル)プロトコルは、ネットワークの任意のサイズ、ほぼすべての接続されたサーバーとワークステーションをサポートする柔軟性を持っているが。TCP / IPプロトコルを使用すると、複雑な設定を必要とする場合には、各ノードは、いくつかの初心者のための少なくとも1つの「IPアドレス」、「サブネットマスク」、「デフォルトゲートウェイ」、「ホスト名」を、必要と彼は、使用にはあまり便利と述べました。
同様にあなたの言語と⼀フェイス通信の異なる種類は、オープンネットワークの通信プロトコルは、このコンピュータを遵守し、限り⼀家族ズーム種類の契約を遵守することが認識されているように、と言うTCP / IPプロトコルと呼ばれています。
インターネットは⽹合意がプロトコル標準の何百も含まれていますが、最も重要な二つのプロトコルはTCPとIPのプロトコルであるため、インターネットのホームは合意がTCP / IPプロトコルと呼ば⽹ズーム
3を、TCP / IPプロトコルの階層化
TCP / IPの参照を(また、リンク層とも呼ばれる)、ネットワークインターフェース層、(また、配線層としても知られる)ネットワーク層、トランスポート層:第一のネットワーク・アーキテクチャモデルは、4つの層(5に分割し、個々の層を参照)に分割し、ARPANETで使用されそして、アプリケーション層は、各層のネットワークは、それらのニーズを完了するために設けられ、その下位層を呼び出します。

各層は、対応するプロトコルを有します。

ネットワークインタフェースレイヤプロトコル:イーサネット802.3、トークンリング802.5、 X.25、フレームリレー、HDLC、PPP ATM など。
ネットワーク層プロトコル:IP(インターネット・プロトコル、インターネット・プロトコル)、ICMP(インターネット制御メッセージプロトコル 、 制御メッセージプロトコル)、ARP(アドレス解決プロトコル、アドレス解決プロトコル)、RARP(逆ARP、逆アドレス解決プロトコル) 。
トランスポートプロトコル:TCP(伝送制御プロトコル、伝送制御プロトコル)およびUDP(ユーザデータグラムプロトコル、ユーザーデータグラムプロトコル)。
アプリケーション層プロトコル:FTP(ファイル転送プロトコル、ファイル転送プロトコル)、TELNET(ユーザーのリモートログインサービス契約)、DNS(ドメインネームサービス、ドメインネームサービスである)、SMTP(簡易メール転送プロトコル 、 簡易メール転送プロトコル)、NFS (ネットワーク・ファイル・システム、ネットワーク・ファイル・システム)、HTTP(ハイパーテキスト転送プロトコル、ハイパーテキスト転送プロトコル)。
ここに画像を挿入説明

1)IPアドレス

1.定義:IPアドレスは、インターネットプロトコルアドレスとして知られている方法に対処するため、インターネット上のホスト、です。

2、作用:⽤来在⽹络中标记⼀台电脑的⼀串数字,⽐如192.168.1.1;在本地局域⽹上是惟⼀的。
ここに画像を挿入説明

3、分类:每⼀个IP地址包括两部分:⽹络地址和主机地址 ,有如下几种类型:
ここに画像を挿入説明
4、私有IP:⽹络IP中,国际规定有⼀部分IP地址是⽤于局域⽹使⽤,也 就是属于私⽹IP,不在公⽹中使⽤的,它们的范围是:

  10.0.0.010.255.255.255    
 
  172.16.0.0172.31.255.255     
 
  192.168.0.0192.168.255.255

5、回环地址IP:

IP地址127.0.0.1 代表本机IP地址,等价于localhost, ⽤ http://127.0.0.1 就可以测试本机中配置的Web服务器。
127.0.0.1,通常被称为本地回环地址(Loop back address),不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在windows操作系统中也有相似的定义,所以通常在不安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。
6、子网掩码:⼦⽹掩码不能单独存在,它必须结合IP地址⼀起使⽤。

⼦⽹掩码的作⽤: 将某个IP地址划分成⽹络地址和主机地址两部分. ⼦⽹掩码的设定

必须遵循⼀定的规则, 用来判断两个IP是否在同一个网络。

                     A: 172.25.254.18/24

                     B: 172.25.0.10/24

7、端口:端⼝就好⼀个房⼦的⻔,是出⼊这间房⼦的必经之路。

端⼝号只有整数,范围是从0到65535;

8、linux中如何查看端口呢?

在命令行输入:cat /etc/services | less 即可查看所需要的查看的服务的端口。

(当然,前提是你的主机安装了你所要查询的服务才能够查询到)

比如:查看http服务的端口:命令行输入:cat /etc/services | less (可以查看规定好的服务对应的端口号)

03、socket编程
1、为什么需要socket?
通过之前的学习, 我们知道本地间通信(IPC)有队列、同步(互斥锁、条件变量等)、以及管道等方法。

但是不同主机之间如果需要通信,则就需要用到socakt.

问题: 本地通过进程PID来唯⼀标识⼀个进程,在⽹络中如何唯⼀标识⼀个进程?

⽹络层的“IP地址”可以唯⼀标识⽹络中的主机,⽽传输层的“协议+端⼝”可以唯⼀标识主机中的应⽤程序(进程)。因此利用IP地址,协议,端⼝就可以标识⽹络的进程。

2、什么是socket?
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

简单来说:socket(简称套接字) 是进程间通信的⼀种⽅式, 能实现不同主机间的进程间通信,我们⽹络上各种各样的服务⼤多都是基于 Socket 来完成通信的。比如以下服务等都是基于socket 来完成通信的。

ここに画像を挿入説明
3、创建socket
在 Python 中 使⽤socket 模块的函数 socket 就可以完成:

socket.socket(AddressFamily, Type)

1). Address Family:

AF_INET: IPV4⽤于 Internet 进程间通信 AF_INET6: IPV6⽤于 Internet 进程间通信

2). Type:套接字类型

SOCK_STREAM: 流式套接字,主要⽤于 TCP 协议 SOCK_DGRAM: 数据报套接字,主要⽤于 UDP 协 议

import socket
 
# 1. 创建socket对象
#       family: AF_INET(IPv4)   AF_INET6(IPv6)      ========= 网络层协议
#       type: # SOCK_STREAM(TCP)   SOCK_DGRAM(UDP) ========== 传输层协议
#       Linux: 可以认为是一个文件;
socketObj = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
print(socketObj.getsockname())
 
#2.  关闭socket对象
socketObj.close()
 
# 2. socket基本使用
import os
os.system('hostname')
 
hostname = socket.gethostname()
print("主机名:", hostname)
 
print(socket.gethostbyname('localhost'))

04、socket中的UDP与TCP
1、UDP
1)什么是UDP

UDP ⽤户数据报文协议,是⼀个⽆连接的简单的⾯向数据报文的运输层(传输层)协议。UDP不提供可靠性,它只是把应⽤程序传给IP层的数据报发送出去,但 是并不能保证它们能到达⽬的地。
由于UDP在传输数据报前不⽤在客户和服 务器之间建⽴⼀个连接,且没有超时重发等机制,故⽽传输速度很快。
UDP是⼀种⾯向⽆连接的协议,每个数据报都是⼀个独⽴的信息,包括完整 的源地址或⽬的地址,它在⽹络上以任何可能的路径传往⽬的地,因此能否到达⽬的地,到达⽬的地的时间以及内容的正确性都是不能被保证的。
2)UDP的特点

UDP是⾯向⽆连接的通讯协议,UDP数据包括⽬的端⼝号和源端⼝号信息, 由于通讯不需要连接,所以可以实现⼴播发送。
UDP传输数据时有⼤⼩限 制,每个被传输的数据报必须限定在64KB之内。
UDP是⼀个不可靠的协议,发送⽅所发送的数据报并不⼀定以相同的次序到达接收⽅。
ここに画像を挿入説明

3)UDP应用场景

UDP是⾯向消息的协议,通信时不需要建⽴连接,数据的传输⾃然是不可靠 的,UDP⼀般⽤于多点通信和实时的数据业务,⽐如:

语⾳⼴播
视频
QQ
TFTP(简单⽂件传送)
SNMP(简单⽹络管理协议)
DNS(域名解释(域名服务器))等等
4)UDP⽹络程序

プロセスを通じてUDP通信サービス:サーバーまたはクライアントのいずれか、最初のソケットを(確立する必要性)サーバーがIPやポートをバインドする必要があり、将来的に通信するオブジェクト。次に、クライアントは、UDPはコネクションレス型であるため、クライアントへの応答を行いますメッセージが送信された後、クライアントは、直接十分に、サーバーに通知する必要がありませんので、サーバは利点を返信、クライアントにメッセージを望んでいる、とクライアントに送信されます、このような通信は終わりました。クライアントが発表を送信しないことを決定したとき、あなたは()オブジェクトのソケットのうちに終了することができます。(サーバは他の人がメッセージを送信したくないときならばもちろん、また、クローズアウトし、独自のソケット()オブジェクトにすることができます。)次のようにイラスト:

ここに画像を挿入説明

ここに画像を挿入説明

実験:

サーバ(UDPサーバー):サービスの提供
ソケットを作成するためにバインドIPとポートオブジェクト---- ---- ----メッセージ(応答)を送信情報を受け取る----閉じます

クライアント(UDPクライアント):提供されたアクセスサービス
ソケットオブジェクトを作成するには、---- ---- ----閉じるメッセージを受け取るメッセージを送信します

公開された22元の記事 ウォンの賞賛0 ビュー181

おすすめ

転載: blog.csdn.net/weixin_45734982/article/details/104219134