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研究せなあかん。

newrelic-installで、/bin or /usr/bin

newrelicをinstallしようとすると、/binと/bin/usrどちらにインストールするか質問がきます。一体何が違うのでしょうか?

$ sudo newrelic-install install

Below is a list of the directories in which we found a copy of PHP.
Please select the directory or directories for which you wish to install
New Relic. You can select either a single directory or
multiple directories by separating each choice with either a space or a
comma. To select all of the directories shown, please enter the special
keyword 'all' (without the quotes).

   1)   /bin
   2)   /usr/bin

ls -lで見てみると、どちらのディレクトリも同じファイルのように見える
$ pwd
/usr/bin
$ ls -l
-rwxr-xr-x 1 root root 5094784 11月 1 04:35 php

$ pwd
/bin
$ ls -l
-rwxr-xr-x 1 root root 5094784 11月 1 04:35 php

### /bin
– Linuxの基本コマンドが登録されている
– 基本的かつ非常時に利用するコマンド

### /usr/bin
– 一般ユーザが使うコマンド
– 緊急時のシステム保守に必須ではないコマンド

性質からいうと、/usr/binで良いか。

.bashrcでターミナルプロンプトの表示名変更

.bash_profileはログイン時に一回起動、.bashrcはシェル起動時に毎回起動

ubuntu-trusty という長ったらしいの変更したい

vagrant@vagrant-ubuntu-trusty-64:~/*

\u:username
\h:hostname
\W:current directory

vim ~/.bashrc

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

PS1がプロンプトの表示
“\h”を”trusty”に書き換えてsource .bashrcで反映する

vagrant@vagrant-ubuntu-trusty-64:~/other/hello-2.7$ source ~/.bashrc
vagrant@trusty:~/other/hello-2.7$

おー、スッキリした♪♪

Slabのメモリ使用量

SReclaimableとSUnreclaimを足すとSlabになる

[vagrant@localhost python]$ cat /proc/meminfo | grep “Slab\|claim”
Slab: 116948 kB
SReclaimable: 58056 kB
SUnreclaim: 58892 kB

slabの内訳。avtab_nodeが多いか。
[vagrant@localhost python]$ slabtop –once –sort=c | head -n 12
Active / Total Objects (% used) : 1312788 / 1350423 (97.2%)
Active / Total Slabs (% used) : 26234 / 26234 (100.0%)
Active / Total Caches (% used) : 98 / 183 (53.6%)
Active / Total Size (% used) : 97729.34K / 103000.36K (94.9%)
Minimum / Average / Maximum Object : 0.02K / 0.08K / 4096.00K

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
27184 27184 100% 0.98K 6796 4 27184K ext4_inode_cache
640944 640732 99% 0.02K 4451 144 17804K avtab_node
417872 417265 99% 0.03K 3731 112 14924K size-32
117216 87569 74% 0.10K 3168 37 12672K buffer_head
182 182 100% 32.12K 182 1 11648K kmem_cache

[vagrant@localhost python]$ sync; echo 2 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: 許可がありません

何いいいいいいいいいいいい

Linux psコマンド

psはLinux上で現在動作しているプロセスを表示するコマンド

[vagrant@localhost python]$ ps
PID TTY TIME CMD
5300 pts/1 00:00:00 ps
32152 pts/1 00:00:01 bash

オプションやgrepなどを組み合わせて使用する

linux free

freeコマンドは空きメモリと使用しているメモリの容量を表示するコマンド

[vagrant@localhost python]$ free
total used free shared buffers cached
Mem: 1020076 720212 299864 6984 94792 408204
-/+ buffers/cache: 217216 802860
Swap: 2064380 447716 1616664

メモリー、swapのused, freeが表示されているのがわかります。

Linux topコマンド

topコマンド
->実行中のプロセスをリアルタイムで表示
->実行中のプロセスをCPU利用率が高い順に表示

[vagrant@localhost python]$ top

top – 22:20:14 up 8 days, 34 min, 1 user, load average: 0.13, 0.30, 0.33
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1020076k total, 723252k used, 296824k free, 94484k buffers
Swap: 2064380k total, 447716k used, 1616664k free, 408512k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5118 vagrant 20 0 15024 1296 1004 R 0.3 0.1 0:00.80 top
1 root 20 0 19232 604 432 S 0.0 0.1 0:01.64 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:02.98 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:01.49 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 6:00.91 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_long/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_power_ef
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
16 root 20 0 0 0 0 S 0.0 0.0 0:03.42 sync_supers

これを見ると、top, init, kthreadd の消費が高いですね。

xintd

ポート監視用のデーモンプログラム
inetdとTCP wrapper(tcpd)の組合せによるアクセス制限が一般的
xinetdの上位互換のinetd

xinetd
– 細かく設定可
– メール通知不可
– アドレス制御 固定長マスク
– 時間による制御可
– アクセス回数制限可
– サービスとインターフェイス 切り分け可
– フォワード機能可

xinetd は起動時に、このファイルから設定情報を読み込む

# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#	allows crc checksumming etc.
service rsync
{
	disable	= yes
	flags		= IPv6
	socket_type     = stream
	wait            = no
	user            = root
	server          = /usr/bin/rsync
	server_args     = --daemon
	log_on_failure  += USERID
}

/etc/hosts

マシンのIPアドレスを決めて、そのアドレス設定を、ネットワーク上の全てのマシンに伝える

[vagrant@localhost waymo-od]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1はループバックアドレス

.bash_profile

– 設定ファイル
– ログインした時に読み込まれる
– ログインシェルがbashの状態でログインした時に読み込まれる
– bash_profileはログインした直後のホームディレクトリにある