5G周波数割り当てとソケット通信の仕組み

– 5Gでは低い周波数(VHF帯)から高い周波数(ミリ波帯)の複数の周波数帯を組み合わせて利用し、場所、時間、アプリケーションなどにより最適な使い方を採用
– 10Gbps + 高速移動対応
– 電波(Hz=1秒間の振動数)とは電磁波。電波を使って通信を行う場合、変調という操作を行い、伝達したい情報を載せる

27.00GHz 〜 27.40GHz 楽天
27.40GHz 〜 27.80GHz NTTドコモ
27.80GHz 〜 28.20GHz au
29.10GHz 〜 29.50GHz ソフトバンク
※4GではドコモにはLowにあたる3,480MHz~3,520MHz、KDDIには3,520MHz~3,560MHz、ソフトバンクは3,560MHz~3,600MHz

周波数帯(バンド)は機種によって事なる
高い周波数帯の電波は回り込みにくいため、屋内やビル街で繋がりにくい可能性がある

1.周波数利用効率のさらなる向上
L Non-Orthogonal Multiple Access:電力ドメインを使って複数ユーザーの信号を重畳することで、さらなるスループットを向上させる
L Massive MIMO: 100以上のアンテナ素子を使い指向性の高いアクティブアンテナを用いて、ビームフォーミングによる干渉回避と、多数のユーザーの同時接続を可能にするMIMO技術であり、20GHz帯など、高い周波数と相性がよく、容量不足の解消につなげる

2. ネットワークの高密度化
L HetNet (Heterogeneous Network):セル半径の異なるシステムを同一エリア内に混在させ、これらを協調して動作させ、ネットワーク全体のキャパシティを大幅に改善する技術
L デュアルコネクティビティ(C/U分離): 端末と基地局は、接続を制御する「C-plane」(制御信号)と、実際のデータが流れる「U-plane」(ユーザーデータ信号)の2つの信号を送受している。広範囲をカバーするマクロセルでC-Planeを、速度を稼ぎやすいスモールセルでU-planeを別々に通信する「C/U分離」方式により、ネットワークを高密度化

パケット制御技術を使っている。パケット通信では、1本の回線で同時に複数の通信が可能(回線交換方式は回線を占有してしまう)
1パケットは128バイト
Packet Assembly and Disassemblyとはパケットの組立/分解装置の事
データはTCPヘッダ、IPヘッダと共に送信される
通信データはOSのTCP処理で行う

TCP/IP階層: プロトコル
アプリケーション層: HTTP, SMTP, POP, FTP
トランスポート層: TCP, UDP
インターネット層: IP
ネットワークインターフェイス層: イーサネット、無線LAN, PPP…

IPアドレスとはネットワークアドレスとホストアドレスに別れる
16.42.0.9で、16.42をネットワークアドレス、0.9をホストアドレス(サブネットとホストアドレスに分割できる)とする
IPアドレスの変換は/etc/hostsで行うか、DNSサーバで変換
IPパケットはgatewayに送信される

Ethernet Frame(イーサネット規格に従って通信する時のデータ): Destination Ethernet address, Source ethernet address, Protocol, Data, Checksum
IP Packet: Length, Protocol, Checksum, Source IP address, Destination IP address, Data
TCP Packet: Source TCP address, Destination TCP address, SEQ, ACK, Data

登録済みのポートは/etc/servicesにある
$ sudo cat /etc/services

http            80/tcp          www www-http    # WorldWideWeb HTTP
http            80/udp          www www-http    # HyperText Transfer Protocol
http            80/sctp                         # HyperText Transfer Protocol

ネットワーク接続一覧の確認
$ netstat -a

パケット送信の流れ
1. Raw Socket作成
2. IPヘッダー作成
3. UDPヘッダー作成
4. 送信

payloadとはデータ送信における正味のデータ部分
Linuxでは、socket()関数を利用してソケットを作成できる
サーバ側はソケットを作成し、接続待ちをするIPアドレスとポートを設定し、接続を受け付け通信を行う
クライアント側はソケットを作成し、接続相手を設定し通信を行う

socket()-> bind() -> listen() -> accept() -> read()/write() -> close()
apacheの場合、不特定多数のクライアントとやり取りするので、子プロセスで複数のaccept()の状態を作る

つまり様々なデータはsocket化して基本的にTCP/IPで、変調して電磁波で送受信して、クライアントとサーバでやり取りしてるってことね。
そして1パケットは128バイトってことは、リクエストに応じたパケットを作成しているのね。
この辺、義務教育で勉強したかったな。しかし、subnetやgatewayはawsの概念と一緒だな。Linux研究せなあかん。

VPC、public subnet、InternetGateway、RouteTableの作成

EC2の構成を見ると、VPCの中にsubnetがあり、その中にEC2が入る。
従って、EC2の前にVPC、subnetを作成していく。

1. VPCの作成
CIDR block

2. Subnetの作成
どこと通信できるか設定

3. Route Tableの作成
Subnet間や外部通信用の設定
SubnetとInternet Gatewayの設定

4. Internet Gatewayの作成
インターネットと通信することをRoute Tableに許可
VPCにアタッチして、Route Tableに紐づけ

5. Network ACLの設定
SubnetのInBound(内部への通信)とOutBound(外部への通信)制御の設定

6. Security Groupの設定
インスタンスのInBound(内部への通信)とOutBound(外部への通信)制御の設定

### 1. VPCの作成
name-tag: dev-vcp
IPv4 CIDR block: 192.168.0.0/16 (10.0.0.0/16などでも可)
※「/16」は16個のアドレスができるという意味。ネットマスク
※CIDRとはIPアドレスの記述形式

CIDR block: A.B.C.D/E
AはVPC作成時に設定(内部のルーティング)
BはVPC作成時に設定(内部のルーティング)
EはVPC作成時に設定
CはSubnet作成時に設定(subnetごとに分ける)
DはSubnet作成後に自動設定(Cから自動生成)

VPC作成時に、VPCのトラフィックをルーティングするためのルールを登録する「ルートテーブル」というリソースも作成される

### 2. subnetの作成
name-tag: dev-subnet-public
vpc: dev-vpc
VPC CIDRs: 192.168.0.0/16
IPv4 CIDR block: 192.168.1.0/28

### 3. Internet Gateway
name-tag: dev-igw
作成後、actionでdev-vcpにattach

### 4. RouteTable作成
どのIPアドレス宛の通信をInternet Gatewayにむけるか決める
name-tag: dev-routetable
vpc: dev-vpc

– ルートテーブルにインターネットゲートウェイへのルートを登録する
->ルートの編集
Destination: 0.0.0.0/0
Target: Internet-gateway igw-********
※VPC内宛以外の通信に関してはインターネットゲートウェイに向く

ルートテーブルからサブネットに紐付け
Subnet Associationsタブをクリック

以上で、VPC(dev-vcp)の中にpublic subnet(dev-subnet-public)ができて、RouteTable(dev-routetable)で、Internet Gatewayに紐付けられている状態ができました。

defaultVPCではなく、実際に作ることで、VPC、public subnet、InternetGateway、RouteTableについて、大幅に理解が深まります。

NATとSTUN・TURNサーバー

WebRTC通信
– Peer to Peer、ブラウザ間で直接通信
– UDP/IPを使用、オーバーヘッドが少ない
– 鍵交換で暗号化通信を行う
-> 相手のIPアドレス、動的なUDPポート番号を知る必要がある
-> 通信経路の仕組みがInteractive Connectivity Establishment、その候補がICE Candidate
–> NATを通過するためのSTUNサーバから取得したポートマッピング
–> Firewallを越えるための、TURNによるリレーサーバーを介した中継通信
–> このやりとりをシグナリングと言う。WebSocketなど複数の方法がある
-> 複数人通信の場合には、それぞれのユーザとSDP/IPのconnectionをつくる必要がある

NATとは
 グローバルIPとローカルのネットワークIPとの変換
 複数のPC/デバイスが同時に通信できるよう、ポートマッピングによるポート変換
 →ブラウザはローカルのIP、UDPポートはわかるが、グローバルのIP、UDPはわからない
 →→Peer to Peerはグローバルの情報を交換する必要がある

STUN(Session Traversal Utilities for NATs)
NATで変換されたIP/UDPを外のSTUNサーバーから教えてもらう
→グローバル情報をシグナリングサーバーけいゆうで相手に渡す
STUNサーバーはGoogleのstun.l.google.com:19302など

TURN(Traversal Using Relays around NAT)
ストリームデータの受け渡しにリレーする
TURNサーバが入ると厳密にはPeer to Peerではなくなる
データのデコード、エンコードは行わないので、ネットワーク負荷が高くなる

あれ、Bitcoinって、P2Pだけど、STAN, TURN使ってるんだっけ?
否、BitcoinはTCP😂

DNS

DNSはDomain Name Systemの略
ドメイン名とIPアドレスの対応付け
メールの宛先ホストを指示

→ IPアドレスではわかりにくい為、名前で指定
ARPANETではホスト名とIPアドレスの対応表としてHOSTS.txtを使用していた。
SRI-NICから入手して接続。SIR-NICはホストとIPの更新作業を行なっていた。実態はAT&Tなど
現在の/etc/hosts と同様

ファイルの増大化に伴い、1983年にRFC882、RFC883発表 これが現在のDNSの元
RFC882:https://tools.ietf.org/html/rfc882
RFC883:https://tools.ietf.org/html/rfc883

DNSの仕組み
名前空間最上位にルートサーバが作成。ルートサーバはjp, comなどドメイン名を管理
ドメインを階層構造で管理、更新を分散化

問い合わせを行う為のDNSサーバはキャッシュ機能がある

セカンダリDNSとは負荷分散、障害対策のために、DNSを二つ用意する
DNSSECとはデータ作成元の認証やデータの完全性を確認できるよう仕様を拡張するもの

1つの権威DNSサーバが管理する範囲をゾーンと呼び、その情報をゾーン情報と呼ぶ
ゾーン情報は、Aレコード、MXレコード、NSレコードなど多数のゾーン情報がある

SOA: ゾーン情報を記載(ドメインDNS, ドメイン管理者、更新間隔、転送再試行、レコード有効時間、キャッシュ有効時間) 他のDNSに転送する
NS: ドメインのDNSサーバ名を指定
A: ホストのIPアドレス
PTR: IPアドレスに対するホスト名
CNAME: ホスト名のエイリアス
MX: ドメインのメール・サーバ名
HINFO: ホストの追加情報
WKS: ホストで実行されているサービス情報
TXT: ホストへのテキスト情報

ネームサーバーとは、インターネット通信時にドメイン名をIPアドレスに変換する名前解決を行うサーバー
ネームサーバー = DNSサーバー

Route53で言う所の SOAがゾーン情報、NSがドメインのDNSサーバーに当たる

AWSのroute53で登録するとDNSサーバーがawsになる。

サーバー側で、virtual hostを設定すると、指定したディレクトリをさす

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com

# Other directives here

</VirtualHost>

ルートネームサーバからサーバに繋げるのはわかるけど、シードDNSがクライアントにipを返す仕組みがわからないな。

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ nslookup google.com
Server: 10.0.2.3
Address: 10.0.2.3#53

Non-authoritative answer:
Name: google.com
Address: 216.58.199.238

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ nslookup 216.58.199.238
Server: 10.0.2.3
Address: 10.0.2.3#53

Non-authoritative answer:
238.199.58.216.in-addr.arpa name = kix05s02-in-f238.1e100.net.
238.199.58.216.in-addr.arpa name = kix05s02-in-f14.1e100.net.

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ dig google.com

; <<>> DiG 9.9.5-3ubuntu0.19-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54587 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 205 IN A 216.58.197.14 ;; Query time: 48 msec ;; SERVER: 10.0.2.3#53(10.0.2.3) ;; WHEN: Fri Nov 01 11:29:11 UTC 2019 ;; MSG SIZE rcvd: 55

WebRTC

ウェブブラウザやモバイルアプリケーションにシンプルなAPI経由でリアルタイム通信を提供するオープンソースPJ
https://webrtc.org/

-Supported Browsers & Platforms
Firefox, Opera, Android, iOS

使用するAPI
– MediaStream
– PeerConnection
– DataChannel

P2P、Node.js、WebSocket
あれ??? これもしかして、、、

SCP command

The “SCP” command is an abbreviation of “Secure Copy”, and it uses ssh to encrypt the communication between the remote host and the local host, and then copy and send the file.

SFTP(SSH File Transfer Protocol)とは

What is SFTP?
A protocol that encrypts information transferred by FTP using “SSH(Secure Shell)”.

SSH?
A protocol that encrypts all information communicated when operating a remote server from a terminal.

“SSH” can be used with “OpenSSH” software etc. It is installed by default in Linux. Windows can also be used with “Cygwin”, “WinSCP”, or “Git Bash” bundled with Git. In any case, an environment where “SSH” can be used is required.

あれ、なんや、基本っぽいな。

split brain

Originally, if either is a primary aircraft, the other must be a secondary aircraft, but both are primary aircraft.

In this way, a situation where multiple primary machine exist when a cluster is split is called split brain. If data is updated in this state, data inconsistencies may occur.

Why does split brain occur?
-> Split brain is mainly caused by network failure between the first and second units.

DNSのAレコードとCNAMEレコードの違い?

The DNS name server holds the correspondence bewteen domain names and host names and IP addresses as a databases. The data processed by this database is called a “resource record”.

The structure and format of this database and resource record depend on the DNS server. The most famous DNS server software “BIND” holds a database called “zone file” as a text file. In BIND, resource records such as correspondence between host name and IP addresses are described in zone files.

– A
– CNAME
– MX (mail exchange)
– NS (name server)
– SOA (start of authority)

The correspondence bewteen domain names and IP addresses does not have to be one to one. Multiple IP addresses can be associated with one domain name. In this case, plurality of IP addresses will be described in one A record.

AWS Route 53

AWSの場合、Aレコードがipアドレスではありませんね。Name Serverも.org, .net, co.uk, comの4つが登録されています。

EtherVPN

EtherVPNってなに?

> SoftEther VPN (“SoftEther” は 「ソフトウェアによるイーサネット」を意味します) は、世界中で最も強力で使用が簡単な、複数 VPN プロトコルに対応した VPN ソフトウェアの 1 つです。SoftEther VPN は Windows、Linux、Mac、FreeBSD および Solaris 上で動作します。

>リモートアクセス VPN と 拠点間接続 VPN を簡単に構築できます。
>HTTP プロトコルを用いて SSL-VPN を伝送するため、NAT やファイアウォールを通過 できます。
>大変画期的な VPN over ICMP および VPN over DNS 機能。
なるほど、VPN接続ってことか。よりセキュアな接続をしたい時などに使いたいってことかしらね。