ネットワークプロトコルの側面上のゲーム開発のためのいくつかのトピック

IPアドレスのサブネットマスク

サブネットマスクの主な役割は2つあり:

IPアドレスを遮蔽する部分には、ネットワークID及びホストIDを識別し、IPアドレスがLAN上にあることを示す、またはリモートネットワーク上にします。お使いのコンピュータのIPを設定するとき、それは2つの重要なパラメータ、1つのIPアドレス、サブネットマスクが発生します。インターネット上のネットワーク上の各ホストのサブネットまたは一意のラベルごとのIPアドレス。

IPサブネットを使用し、廃棄物を削減することです。インターネットの発展に伴い、より多くのネットワークは、数百限り多くのいくつかのネットワーク、いくつかの単なるいくつかの、あなたはIPアドレスの多くを無駄にして、そのサブネットを生成するので。ネットワークアプリケーションの効率を向上させることができるサブネットを使用してください。

 

第二に、大規模なIPネットワークのための小さなサブネットワークに分割されています。IPアドレスとサブネットマスクとバイナリバイナリ操作、デバイスとホスト番号のネットワークアドレスを決定し、サブネットマスクは、サブネットのホストの指定されたIPアドレスを示すために使用されます。サブネットマスクだけでは存在できない、それはIPアドレスと組み合わせる必要があります。

サブネットマスクの役割は、二つの部分にネットワークとホストアドレスにIPアドレスを分割することです。それは、ネットワークのネットワークおよびホスト部分をマスクサブネットによって区別されます。一度設定したサブネットマスク、ネットワークとホストアドレスが固定されています。

最も顕著な特徴の一つは、サブネット、サブネットマスクをしています。同一のIPアドレスは、サブネットマスクの長さは32であり、小数に使用することができます。

 

投稿者:Baiduの百科事典

 

 

 

クライアント側アクティブダイヤルアップセッション

あなたがセッションを要求するためのイニシアチブを取ることはありません場合は、その後、サーバー側は、あなたがどこにあるかわからないので、すべてのネットワーク接続は、クライアントがサーバに要求を送信します。

 

四の振っTCP

TCPコネクションのでTCP四波は、全二重であるため、各方向を別々にシャットダウンされなければなりません。

TCP接続のための全二重であるため、各方向を別々にシャットダウンされなければなりません。原理は一つのタスクが完了すると、そのデータ送信が接続方向を終了するFINを送信することができるということです。FINが唯一のデータは、この方向に流れていないことを意味受信、TCP接続はまだFINを受け取った後にデータを送信することができます。他のパッシブ近いを実行しながら、最初のオフは、アクティブクローズを行うためのものであろう。

(1)クライアントは、FINを送信し、サーバBへのクライアントAを閉じるためには、データ(セグメント4)を送信します。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)

TCP采用四次挥手关闭连接如图所示为什么建立连接协议是三次挥手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

 

来自:百度百科

 

tcp和udp区别,各自的优点和缺点

以前只知道tcp稳定,面向连接。udp不稳定,面向数据报。

tcp最根本的区别在于传输数据的方式

tcp基于流的方式,需要建立连接,建立连接简单地来说就是server端知道了你的ip地址和端口号。

假如你在高铁上,你现在附近的网络基站ip地址是xxx,你到了下个地方,基站换了,ip地址不一样了,这下你就需要重新建立连接。

优点:面向流,可以保证传输的可靠性和有序性,但是如果中间一段丢失的话,可能就会一直卡住,等待server端发送接收信号。由于滑动窗口有限制(https://blog.csdn.net/yao5hed/article/details/81046945https://www.cnblogs.com/alifpga/p/7675850.html),所以发送的包体大小不定,会出现黏包和拆包,这需要在定制自己的数据报协议时解决,比如在包体的最前面设置一个固定字节大小的数据用来表示本次包体的长度。

udp基于数据报的方式,udp不会像tcp那样一段一段的发送,然后等待上一次发送成功后发送下一段,udp是将几个需要发送的包直接全部发布到网络上,然后每个包走自己的传输路径,可能相同可能不同,所以到达server端时,顺序可能会被打断。但是最重要的问题是使用udp时,包体会丢失,因为没有tcp那样可靠,还有防火墙等等的原因,udp的坑很多。

关于项目的数据报怎么去设计也是一个比较重要的问题。

 

关于json,xml,protobuf

这三个都是用来序列化文件和进行存储或信息传输的。

三者大部分都一样,json和xml是文本的形式,较大,更侧重于结构化,信息表示的更直观。

protobuf是二进制的形式,较小,更侧重于传输,信息表示没那么直观。

 

各种类型的大小

确定数据中各种数据类型也是很重要的,如果你用一个2字节就可以表示的信息,用了4字节。

假如一天的流量是100w次,那么你就多传输了2 * 100w的字节,即浪费速度,也浪费空间。 

WIN32下:

sizeof(char):1

sizeof(short):2

sizeof(int):4

sizeof(long):4

sizeof(long long):8

sizeof(unsigned int):4

sizeof(float):4

sizeof(double):8

sizeof(pointer):4

 

x64下:

sizeof(char):1

sizeof(short):2

sizeof(int):4

sizeof(long):4

sizeof(long long):8

sizeof(unsigned int):4

sizeof(float):4

sizeof(double):8

sizeof(pointer):8

 

Int16, 等于short

Int32, 等于int

Int64, 等于long,

这些都与操作系统的位数有关

32位和64位系统在Windows下基本数据类型的大小都是一样的。只有指针的大小不一样!32位指针大小为4byte,而64位的指针大小为8byte。

Linux下,long型是64位的,这一点是和Windows不同的地方。64位系统下是可以运行32位程序的。但是反过来的话是运行不了的。

 

重连相关的问题:

重连这一块是一个很大的坑,以后再谈。

 

 

おすすめ

転載: blog.csdn.net/iov3Rain/article/details/95080308