勉強日記

チラ裏

CCNA試験対策 下巻ch18: Understanding REST and JSON

https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com


REST-Based APIs

  • REpresentational State Transfer

REST-Based (RESTful) APIs

  • 6つの性質
    • クライアント-サーバモデル
    • ステートレス
    • キャッシュ可能/不可能の明確な記述
    • 統一的なインタフェース
    • 階層構造
    • Code-on-demand
  • とくに最初の3つ
  • HTTPは必須でないことに注意

REST APIs and HTTP

  • HTTPは必須でないが、多くのRESTful APIはHTTP上で定義される
  • なぜならばHTTPは…
    • クライアント-サーバモデル
    • 本質的にステートレス
    • キャッシュ可能/不可能をHTTPヘッダで表現できる

Software CRUD Actions and HTTP Verbs

  • 統一的なインタフェース
  • HTTP各メソッドが対応しているという話

Using URIs with HTTP to Specify the Resource

  • 階層構造
  • URIのパス部分でリソースを表現することで実現できる

Data Serialization and JSON

The Need for a Data Model with APIs

  • サーバとクライアントとで変数の内部表現が違うので必要

Data Serialization Languages

JSON

  • JavaScript Object Notation
  • 【補】JSON5なんてのが出てきていたりする

XML

  • eXtentible Markup Language
  • マークアップ言語としての機能がそのままデータ構造の表現にも有用で、データシリアライゼーションに使われるに至る

YAML

  • YAML Ain't a Markup Language
    • 初期はYet Another Markup Languageだったらしい
    • が、マークアップよりもデータ表現のほうが重視されてYAML Ain't~に
  • REST APIでは使われない
    • 【所感】確かに見たことない
  • 自動化の設定ファイルなどで使うことが多い

CCNA試験対策 下巻ch4: Security Architectures

https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com


Security Terminology

  • セキュリティの必要性
    • 閉じている系でさえ問題がおきる
      • 機密を盗んだり
    • 開いている系ではなおさら
      • ワイヤレスAP
      • 物理出社
      • インターネット接続
      • ビジネスパートナーのネットワーク接続
  • 言葉の定義
    • vulnerability
      • 例: ドア
        • たとえ鍵がかかっていても
    • exploit
      • 例: 鍵以外の、不正にドアを開ける道具 -- ピッキング道具など
        • 特定のvulnerability以外には有効でないことが多い
    • threat
    • mitigation techniques
      • 例: ドアを頑丈にする、侵入検知アラームをつけるなど

Common Security Threats

Attacks That Spoof Addresses

Denial-of-Service Attacks

  • SYN-flood attackが有名

Reflection and Amplification Attacks

  • 送信元アドレスを攻撃対象のものにspoofして間接的にパケットを送りつけるやつ
  • amplification attack
    • リフレクターでデータを増幅して攻撃対象に送りつけ、帯域を枯渇させる
    • DNS amp
      • exploit: DNSの「問い合わせよりも応答のほうが必ず大きい」という性質
    • NTP amp
      • exploit: monlistの、200バイト程度のリクエストに対して100倍以上のレスポンスパケットが返る性質

Man-in-the-Middle Attacks

  • トラフィックを盗聴・改ざんする
  • ARPのMITM
    • ARP応答をspoofingしてL2機器のARPテーブルを汚染し
  • DNSのMITM -- DNSキャッシュポイズニング
    • 権威サーバーからフルリゾルバーへのDNS応答をspoofingしてDNSキャッシュを汚染する

Reconnaissance Attacks

Buffer Overflow Attacks

  • 任意のコードが実行されたりしてこわいやつ

Malware

Trojan Horse Virus Worm
他のソフトウェアにこっそり同梱される yes no no
寄生する no yes no
増殖する no yes yes

Human Vulnerabilities

  • social engineering
  • phishing
    • 政府などの大物狙いはwhalingとも
  • pharming
    • 偽装サイトに誘導する点ではphishingと同じだが、やり口が異なる
    • よりdrasticなやり方
      • DNSキャッシュポイズニングや/etc/hostsの改変など
  • watering hole attack

Password Vulnerabilities

Password Alternatives

  • パスワードはSYK (Something You Know)
  • 多要素認証 -- SYH (Something You Have) や SYA (Something You Are)と組み合わせる
  • SYHの例
    • 短時間しか使えないトーク
    • 証明書
      • 期限がある
      • revokeできる
  • SYAの例

Controlling and Monitoring User Access

  • AAA
    • Authentication
      • 誰?
    • Authorization
      • 誰かはわかった。何を許可する?
    • Accounting
      • 何をした?
  • 小規模ならばネットワーク機器自体に認証機能がある
  • スケールするにはAAAサーバーを立てる
  • AAAクライアントロールのSwitchはNAD(Network Access Device)またはNAS(Network Access Server)とよばれる

Developing a Security Program to Educate Users

  • 盛り込むべき要素
    • user awareness
    • user training
    • physical access control
      • アクセスバッジはスケーラブルで、記録が残るので監査でも役立つ

英語

  • pester
    • 困らせる
  • eavesdrop
    • 盗聴する
  • unwitting accomplice
    • 無自覚の共犯者
      • リフレクターとして加害者になってしまう側を指している
  • reconnaissance
    • 偵察
  • disguised
    • 偽装された
  • watering hole

CCNA試験対策 下巻ch3: Advanced IPv4 Access Control Lists

https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com


  • ACLは4つに大別される:
Numbered Named
Standard
Extended
  • 本章ではStandard Numbered以外の3つを学ぶ

Extended Numbered IP Access Control Lists

  • Standard Numbered ACLではsource IP addressしかマッチングに使えなかった
  • Extendedではいろいろなフィールドを使える

Matching the Protocol, Source IP, and Destination IP

Matching TCP and UDP Port Numbers

Router(config)#access-list 101 permit ?
  ahp    Authentication Header Protocol
  eigrp  Cisco's EIGRP routing protocol
  esp    Encapsulation Security Payload
  gre    Cisco's GRE tunneling
  icmp   Internet Control Message Protocol
  ip     Any Internet Protocol
  ospf   OSPF routing protocol
  tcp    Transmission Control Protocol
  udp    User Datagram Protocol
  
Router(config)#access-list 101 permit tcp ?
  A.B.C.D  Source address
  any      Any source host
  host     A single source host
  
Router(config)#access-list 101 permit tcp host 1.1.1.1 ?
  A.B.C.D  Destination address
  any      Any destination host
  eq       Match only packets on a given port number
  gt       Match only packets with a greater port number
  host     A single destination host
  lt       Match only packets with a lower port number
  neq      Match only packets not on a given port number
  range    Match only packets in the range of port numbers

Router(config)#access-list 101 permit tcp host 1.1.1.1 eq ?
  <0-65535>  Port number
  ftp        File Transfer Protocol (21)
  pop3       Post Office Protocol v3 (110)
  smtp       Simple Mail Transport Protocol (25)
  telnet     Telnet (23)
  www        World Wide Web (HTTP, 80)
  • IPアドレス一致/範囲
  • ポート番号一致/不等/範囲
  • telnetを禁止する例
    • 禁止前
R2>telnet 10.1.1.254
Trying 10.1.1.254 ...Open


Router>exit

[Connection to 10.1.1.254 closed by foreign host]
  • 任意のホストのEphemeral Portsから10.1.1.254の23番ポートへのinboundパケットをdenyする
    • Ephemeral Portsの範囲は49251(0xBFFF)-65535
Router(config)#access-list 101 deny tcp any gt 49151 10.1.1.254 0.0.0.0 eq telnet
Router(config)#int g0/0/0
Router(config-if)#ip access-group 101 in
  • 繋がらなくなる
R2>telnet 10.1.1.254
Trying 10.1.1.254 ...
% Connection timed out; remote host not responding

Extended IP ACL Configurations

  • なるべくパケット送信元の近くでfilteringする
    • 帯域節約のため
  • 指定した条件すべてを満たすパケットだけがマッチする
  • 100-199, 2000-2699番を使う

Extended IP Access Lists: Example 1

Router(config)#no access-list 101
Router(config)#access-list 101 deny tcp any gt 49151 10.1.1.254 0.0.0.0 eq 23
Router(config)#end

Router#show running-config | section access-list
access-list 101 deny tcp any gt 49151 host 10.1.1.254 eq telnet
  • ポート番号を数値で指定してもconfig上ではテキスト版になる
    • 23 -> telnet

Extended IP Access Lists: Example 2

Practice Building access-list Commands

Named ACLs and ACL Editing

  • ACLは書いた順番のfirst-matchなので行削除とかしたくなる

Named IP Access Lists

  • 名前をつけてStandard/Extended ACLを作成できる
Router(config)#ip access-list ?
  extended  Extended Access List
  standard  Standard Access List

Router(config)#ip access-list extended no-telnet
  • 設定項目はaccess-listコマンドとおなじ
Router(config-ext-nacl)#deny tcp any ?
  A.B.C.D  Destination address
  any      Any destination host
  eq       Match only packets on a given port number
  gt       Match only packets with a greater port number
  host     A single destination host
  lt       Match only packets with a lower port number
  neq      Match only packets not on a given port number
  range    Match only packets in the range of port numbers

Router(config-ext-nacl)#deny tcp any 10.0.0.254 0.0.0.0 eq telnet 
Router(config)#interface g0/0/0
Router(config-if)#no ip access-group 101 in
Router(config-if)#ip access-group ?
  <1-199>  IP access list (standard or extended)
  WORD     Access-list name
Router(config-if)#ip access-group no-telnet ?
  in   inbound packets
  out  outbound packets
Router(config-if)#ip access-group no-telnet in
Router#show running-config | section access-list
access-list 101 deny tcp any gt 49151 host 10.1.1.254 eq telnet
ip access-list extended no-telnet
 deny tcp any host 10.0.0.254 eq telnet

Editing ACLs Using Sequence Numbers

Router#show running-config | section access-list
access-list 101 deny tcp any gt 49151 host 10.1.1.254 eq telnet
ip access-list extended no-telnet
 deny tcp any host 10.0.0.254 eq telnet
 deny tcp any host 10.1.1.254 eq telnet
  • 間違えてしまった1行目deny tcp any host 10.0.0.254 eq telnetを消したい
Router(config)#ip access-list extended no-telnet

Router(config-ext-nacl)#do show ip access-lists no-telnet
Extended IP access list no-telnet
    deny tcp any host 10.0.0.254 eq telnet
    deny tcp any host 10.1.1.254 eq telnet (12 match(es))
  • 教科書的にはデフォルト10刻みの行番号が出てくるはずなのだが…Packet Tracerだからか出てこなかった
  • 見えないが、行番号10で行を指定して消せる
Router(config-ext-nacl)#no 10
Router(config-ext-nacl)#do show ip access-lists no-telnet
Extended IP access list no-telnet
    deny tcp any host 10.1.1.254 eq telnet (12 match(es))
  • 行の内容の否定でも消せる
Router(config-ext-nacl)#permit ip any any
Router(config-ext-nacl)#do show ip access-lists no-telnet
Extended IP access list no-telnet
    deny tcp any host 10.1.1.254 eq telnet (12 match(es))
    permit ip any any

Router(config-ext-nacl)#no permit ip any any
Router(config-ext-nacl)#do show ip access-lists no-telnet
Extended IP access list no-telnet
    deny tcp any host 10.1.1.254 eq telnet (12 match(es))
  • 行番号を指定して割り込むこともできる
Router(config-ext-nacl)#5 permit ip any any
Router(config-ext-nacl)#do show ip access-lists no-telnet
Extended IP access list no-telnet
    permit ip any any
    deny tcp any host 10.1.1.254 eq telnet (12 match(es))

Router(config-ext-nacl)#no 5
Router(config-ext-nacl)#do show ip access-lists no-telnet
Extended IP access list no-telnet
    deny tcp any host 10.1.1.254 eq telnet (12 match(es))

Numbered ACL Configuration Versus Named ACL Configuration

Router(config)#ip access-list standard 1
Router(config-std-nacl)#permit any
Router(config-std-nacl)#do show ip access-lists 1
Standard IP access list 1
    permit any
Router#show running-config | section access-list
access-list 101 deny tcp any gt 49151 host 10.1.1.254 eq telnet
ip access-list extended no-telnet
 deny tcp any host 10.1.1.254 eq telnet
access-list 1 permit any
  • numbered ACLもnamed ACLと同様にaccess-listコンフィグモードで設定できる
  • が、configファイル上ではグローバルコンフィグのaccess-listコマンドの形で保存される

ACL Implementation Considerations

  • extended ACLはなるべくパケット送信元の近くに配置する
    • パケットを早期に廃棄できるよう
  • standard ACLはなるべくパケット宛先の近くに配置する
    • 意図せず、廃棄する必要のないパケットまで廃棄してしまうミスを防止するため
      • source IP addressしか設定できないので起こりやすい
  • 条件の狭いものから順に書く
  • ACLに変更を加える前に、interfaceコンフィグモードのno ip access-groupコマンドで当該ACLを無効化する
    • Cisco推奨
    • 過渡状態をさけるため
    • 削除されたACLが紐付いたままになるのを防ぐため
      • 指定のACLが存在しないと、何もフィルタリングされない (IOSバージョン依存)
      • 同じ名前で新しくACLを作成し、何かルールを追加した瞬間、暗黙のdeny anyで全てのパケットがフィルタリングされうるようになる
        • トラブルのもと
Router(config-std-nacl)#do show running-config | section interface GigabitEthernet0/0/0
interface GigabitEthernet0/0/0
 ip address 10.1.1.254 255.255.255.0
 ip access-group hoge in
 duplex auto
 speed auto

Router(config-std-nacl)#do show ip access-list hoge
Standard IP access list hoge
  • 存在しない、または空のACLが紐付いているうちはpingが通る
R2>ping 10.1.1.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms
  • 何かルールを追加した瞬間に、暗黙のdeny anyでpingが通らなくなる
Router(config-std-nacl)#permit 1.1.1.1
R2>ping 10.1.1.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)

Oracle認定 MySQL 5.6 Developer 合格体験記


https://education.oracle.com/ja/mysql-56-developer/pexam_1Z0-882education.oracle.com

動機

  • OSS-DBはgoldまで取ってあるが、業務ではもっぱらMySQLしか使わなそうなので
    • PostgreSQLだったらこれがあるのに」的なのをなくしたい。MySQLを深く知ることでMySQLを愛せるようになるという期待
  • CCNAの公式試験対策本の下巻がコロナ禍の影響でいつまで経っても届かないので、届くまでにちゃちゃっと取るか〜という気持ち

勉強期間

5/22~6/6の2週間くらい

勉強時間

45時間くらい

f:id:wand_ta:20200606224738p:plain

  • 「基本的な最適化」でだいぶ時間を溶かしてしまった
    • DBA寄りのところまで踏み込みすぎた感
      • そのうちAdministrator資格も取るので無駄ではない
    • 実行計画改善まわりでサンプルデータの用意に難儀して時間を浪費した。generate_series関数が恋しい

勉強方法

  • まともな対策本や教材の類が見つからなかったので、試験公式の「試験内容 チェックリスト」と5.6公式ドキュメントを突き合せながら、実際にSQLコマンドを打つ形で勉強した
  • PostgreSQLとの対比をしながら学ぶことで、効果的に学習し、理解を深めることができたように思う。似て非なるものの食べ比べ、大事ですね

所感

(CCNA本が)届くまでにちゃちゃっと取るか〜という気持ち

普通にクソムズでした。普段MySQLを結構使ってる人も、ちゃんと対策しないと落ちるんじゃないでしょうか

  • 「試験内容 チェックリスト」から逸脱した出題は(当然)なかったように思う
  • OSS-DBのsilver/goldほどアプリケーションエンジニアとDBAで分かれていないなぁ、という印象
    • まだMySQL 5.7 Administrator受けてないんですけどね
    • けっこうDBA的な知識が問われたように思う
  • 「きみ、重箱の隅つつくのうまいねぇ〜」という感じの問題も多め
    • 実際に手を動かしていないとなかなか覚えていないような事柄も訊かれる

今後

CCNA試験対策 下巻ch2: Basic IPv4 Access Control Lists

https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com


IPv4 Access Control List Basics

  • source IP address, destination IP address, port numberなどに基づいてパケットを特定する
  • もっとも多いユースケースはパケットフィルタリング
  • 他の用途にも使える

ACL Location and Direction

  • interfaceごとにACLを有効化して、inbound/outboundでACLロジックを設定する

Matching Packets

  • source IP address, destination IP address, TCP/UDP port numberなどに基づいてパケットのマッチングを行う

Taking Action When a Match Occurs

  • 本書ではフィルタリングのみ扱う
    • deny/permit

Types of IP ACLs

Numbered Named
Standard
Extended
  • 4つに大別される
  • 本章ではStandard/Extended Numberedを学ぶ

Standard Numbered IPv4 ACLs

  • source IPにのみマッチするやつ
  • 1-99, 追加1300-1999

List Logic with IP ACLs

  • first-matchなので、狭いのから広げていく
10.1.1.1 permit
10.1.1.x deny
10.x.x.x permit
  • 1行でもコマンドが登録されていて何にもマッチしない場合、最後の暗黙のdeny anyにマッチする

Matching Logic and Command Syntax

  • グローバルコンフィグでACLを作成
Router(config)#access-list ?
  <1-99>     IP standard access list
  <100-199>  IP extended access list

Router(config)#access-list 99 ?
  deny    Specify packets to reject
  permit  Specify packets to forward
  remark  Access list entry comment

Router(config)#access-list 99 deny ?
  A.B.C.D  Address to match
  any      Any source host
  host     A single host address  

Router(config)#access-list 1 deny any
  • インタフェースコンフィグでinbound/outbound別にACLの番号を指定する
Router(config-if)#ip access-group 1 ?
  in   inbound packets
  out  outbound packets
Router(config-if)#ip access-group 1 in
  • コンフィグ確認
Router#show running-config | section access-list
access-list 1 deny any

Router#show running-config | section interface
interface GigabitEthernet0/0/0
 ip address 10.1.1.254 255.255.255.0
 ip access-group 1 in
 duplex auto
 speed auto
  • 疎通のできないこと確認
R2#ping 10.1.1.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)
  • 【補】debugにも映らなくなる
Router#debug ip icmp
ICMP packet debugging is on
Router#

Matching the Exact IP Address

Matching a Subset of the Address with Wildcards

Binary Wildcard Masks

Finding the Right Wildcard Mask to Match a Subnet

Router#show running-config | section access-list
access-list 1 permit host 10.1.1.2
access-list 1 deny 10.1.0.0 0.0.255.255
  • 10.1.1.2からのpingは通る
    • host 10.1.1.2にマッチし、permitされる
R2(config-if)#ip add 10.1.1.2 255.255.255.0
R2(config-if)#end
R2#ping 10.1.1.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/1/5 ms
  • 10.1.1.3からのpingは通らない
    • 10.1.0.0 0.0.255.255 にマッチし、denyされる
R2(config-if)#ip add 10.1.1.3 255.255.255.0
R2(config-if)#end
R2#ping 10.1.1.254

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.254, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)
  • 0.0.255.255: wildcard mask (WC mask)
    • OSPFとかで使ったやつ
    • subnetの論理反転
    • 変化していいよ、という部分のビットが立っている

Matching Any/All Addresses

  • any
Router(config)#access-list 1 deny ?
  A.B.C.D  Address to match
  any      Any source host
  host     A single host address  

Implementing Standard IP ACLs

Router#show ip access-lists 
Standard IP access list 1
    10 permit host 10.1.1.2 (10 match(es))
    20 deny 10.1.0.0 0.0.255.255 (5 match(es))
  • 統計情報も見られる

Standard Numbered ACL Example 1

Standard Numbered ACL Example 2

  • 「サーバー1からPC-Aへのパケットはpermitして」
  • 「サーバー1からPC-Bへのパケットはdenyして」
  • standard numbered ACLではこれらを両立できない
    • source IP addressでしかマッチングできない
    • first-matchなので、「サーバー1から」のコマンドは1つしか適用されない
  • extended numbered ACLを使う必要がある
    • destination IP addressも込みでルールを記述できる
    • 100-199, 追加2000-2699
Router(config)#access-list ?
  <1-99>     IP standard access list
  <100-199>  IP extended access list

Router(config)#access-list 101?
<100-199>  

Router(config)#access-list 101 ?
  deny    Specify packets to reject
  permit  Specify packets to forward
  remark  Access list entry comment

Router(config)#access-list 101 permit ?
  ahp    Authentication Header Protocol
  eigrp  Cisco's EIGRP routing protocol
  esp    Encapsulation Security Payload
  gre    Cisco's GRE tunneling
  icmp   Internet Control Message Protocol
  ip     Any Internet Protocol
  ospf   OSPF routing protocol
  tcp    Transmission Control Protocol
  udp    User Datagram Protocol

Router(config)#access-list 101 permit ip ?
  A.B.C.D  Source address
  any      Any source host
  host     A single source host

Router(config)#access-list 101 permit ip 10.1.1.1 ?
  A.B.C.D  Source wildcard bits

Router(config)#access-list 101 permit ip 10.1.1.1 0.0.0.0 ?
  A.B.C.D  Destination address
  any      Any destination host
  host     A single destination host

Router(config)#access-list 101 permit ip 10.1.1.1 0.0.0.0 10.2.2.2 ?
  A.B.C.D  Destination wildcard bits

Router(config)#access-list 101 permit ip 10.1.1.1 0.0.0.0 10.2.2.2 0.0.0.0 ?
  dscp        Match packets with given dscp value
  precedence  Match packets with given precedence value
  <cr>
  • remarkでACLにドキュメントを添えられる
Router(config)#access-list 1 ?
  deny    Specify packets to reject
  permit  Specify packets to forward
  remark  Access list entry comment
Router#show running-config | section access-list
access-list 1 permit host 10.1.1.2
access-list 1 deny 10.1.0.0 0.0.255.255
access-list 1 remark sample acl

Troubleshooting and Verification Tips

  • access-listコマンド末尾にlogを追記することでdeny/permit時のログを出力できるらしい
    • Packet Tracerで動作せず

CCNA試験対策 下巻ch1: Introduction to TCP/IP Transport and Applications

https://www.ciscopress.com/store/ccna-200-301-official-cert-guide-volume-2-9781587147135www.ciscopress.com


TCP/IP Layer 4 Protocols: TCP and UDP

  • Application層にいろいろなサービスを提供する
  • 例: Error recovery(TCPのみ)
    • packet (L3PDU)はrouterで諸々の理由で破棄されることがある
      • 誤り
      • 輻輳
      • 正しいrouteがわからない
    • L2でもフレームが失われることあり
  • TCPは機能面にすぐれ、UDPは非機能(性能)面にすぐれる
Function UDP TCP
Multiplexing using ports o o
Error recovery o
Flow control using windowing o
Connection establishment and termination o
Ordered data transfer and data segmentation o

Transmission Control Protocol

Multiplexing Using TCP Port Numbers

  • どのアプリケーションにデータを渡せばいいかをport numberで識別
  • port number
    • Well Known Ports
      • System Portsとも
      • 0-1023
      • IANAが割り当てる(assign)やつ
    • User Ports
      • Registered Portsとも
      • 1024-49151 (0xBFFF)
      • IANAにより割り当てられるが、well-known portsほど厳格でないもの
    • Ephemeral Ports
      • Dynamic Ports, Private Portsとも
      • 49252(0xC000)-65535
      • クライアントアプリケーションに一時的に割り当てられる(allocate)もの
Port Number Protocol Application
20 TCP FTP data
21 TCP FTP control
22 TCP SSH
23 TCP Telnet
25 TCP SMTP
53 UDP,TCP DNS
67 UDP DHCP Server
68 UDP DHCP Server
69 UDP TFTP
80 TCP HTTP(WWW)
110 TCP POP3
161 UDP SNMP
443 TCP SSL
514 UDP Syslog

Connection Establishment and Termination

f:id:wand_ta:20200616043141p:plain

  • three-way connection establishment (three-way handshake)

f:id:wand_ta:20200616043153p:plain

  • コネクションの終了はfour-way
  • ニーモニックの意味
    • SYN
      • synchronize the sequence numbers
      • sequence number
        • TCPヘッダ20バイトのうち4バイト(4-8)をしめる
        • 順番通り届くこと、欠落のなきことの保証につかう
    • ACK
      • acknowledgment
    • FIN
      • finished

Error Recovery and Reliability

f:id:wand_ta:20200616043226p:plain

  • acknowlegment number:「ここからのデータくれ」
    • three-way handshakeで立てるACKフラグとは別物
    • sequence numberの抜けに対して問い合わせる
    • 最後まで受信したら「次のくれ」と問い合わせる
  • forward acknowledgment
    • 「Nバイト目まで受け取ったよ」ではなく「N+1バイト目からくれ」という問い合わせ方
  • 4バイトのacknowledgmentフィールドを使用する

f:id:wand_ta:20200616043237p:plain

Flow Control using Windowing

f:id:wand_ta:20200616043252p:plain

  • 輻輳制御
  • sliding window
    • dynamic windowとも
    • 一度に送信するデータ容量を逐次変える
      • 輻輳がなければ上げる
      • 輻輳があれば下げる

User Datagram Protocol

  • UDPヘッダはsource portとdestination port 2バイトずつの計4バイト。超簡素
  • したがってport numberによるmultiplexing以外のサービスは提供しない

TCP/IP Applications

Uniform Resource Identifiers

http://www.certskills.com/blog
  • 正式な名前
    • scheme://authority/path
  • Webページの例
    • protocol://server'sname/web page

Finding the Web Server Using DNS

しってるので略

Transferring Files with HTTP

  • HTTP/1.0ではrequest/responseごとにTCP接続/切断がなされる
  • HTTP/1.1ではConnection: Closeヘッダを指定しない限りTCP接続は保持される
    • keep-aliveという

How the Receiving Host Identifiers the Correct Receiving Application

  • TCP/UDPセグメントはIPパケットで、IPパケットはIEEE802.3フレームでくるまれて伝送される
  • 受信側がどのアプリケーションにデータを渡せばいいいか知るためにはフレーム、パケットを開梱してport numberを知る必要がある
  • ので、低レイヤのヘッダには高レイヤプロトコルについての情報がある

MySQL 5.6 Developer試験対策 6 MySQLの一般的な構文_3

MySQL 5.6 Developer試験 公式「試験内容 チェックリスト」

https://education.oracle.com/ja/mysql-56-developer/pexam_1Z0-882education.oracle.com

MySQL 5.6 リファレンスマニュアル

dev.mysql.com


MySQLのデータ型の特徴と適切な使用方法を識別する

dev.mysql.com

数値型

整数型

CREATE TABLE tbl (a INT UNSIGNED, b INT);
INSERT INTO tbl VALUES (3, 2);
mysql> SELECT a-b FROM tbl;
+------+
| a-b  |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> SELECT b-a FROM tbl;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '("sample"."tbl"."b" - "sample"."tbl"."a")'
  • 一方がunsignedだと結果もunsigned
  • この場合、2-3をunsignedに格納しようとしてエラーになる
  • NO_UNSIGNED_SUBTRACTION SQLモードを設定することでこの挙動を変えることができる
mysql> SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT b-a FROM tbl;
+------+
| b-a  |
+------+
|   -1 |
+------+
1 row in set (0.00 sec)
  • M, ZEROFILL
mysql> CREATE TABLE tbl(col INT(10) ZEROFILL);
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO tbl VALUES (3);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM tbl;
+------------+
| col        |
+------------+
| 0000000003 |
+------------+
1 row in set (0.00 sec)
  • BOOL, BOOLEANTINYINT(1)のシノニム
mysql> CREATE TABLE tbl (col BOOL);
Query OK, 0 rows affected (0.01 sec)

mysql> DESC tbl;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| col   | tinyint(1) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)
  • TRUE,FALSE自体1/0のシノニム
SELECT TRUE,FALSE FROM DUAL;
+------+-------+
| TRUE | FALSE |
+------+-------+
|    1 |     0 |
+------+-------+
1 row in set (0.00 sec)
  • すべての演算は符号付きBIGINT値またはDOUBLE値を用いて行われる
  • 型一覧
name synonym length (bit)
BIT(M) M (1-64)
BOOL TINYINT(1)
TINYINT(M) 8
SMALLINT(M) 16
MEDIUMINT(M) 24
INT(M) 32
INTEGER(M) INT(M)
BIGINT(M) 64
SERIAL BIGINT UNSIGNED
NOT NULL AUTO_INCREMENT UNIQUE

固定小数点数

  • DECIMAL[(M[,D])]
  • 正確な値を投入するには文字列で
mysql> CREATE TABLE tbl (col DEC(6,4));
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO tbl VALUES ('3.1415');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM tbl;
+--------+
| col    |
+--------+
| 3.1415 |
+--------+
1 row in set (0.00 sec)
  • DEC,NUMERIC,FIXEDシノニムあり

浮動小数点数

  • FLOAT[(M,D)]
    • IEEE754 単精度 準拠
    • H/WやOSによって実際の範囲が狭まることはある
    • 演算はDOUBLE値で行われることに注意する
      • =使うな的な話
  • DOUBLE[(M,D)]
    • IEEE754 倍精度 準拠
    • H/WやOSによって実際の範囲が狭まることはある
  • REAL
    • DOUBLE(デフォルト),またはFLOATのシノニム
      • 'REAL_AS_FLOAT' SQLモードで切り替え

日付と時間型

  • TIMEは時刻(time point, 00:00:00から23:59:59.fspまで)だけでなく時間(duration)を表現できる
    • 838時間まで
      • 0x7FFFFFのDEC表現8388607に由来する

文字列型

CHAR/VARCHAR

  • VARCHARはバイト長を保持するために1-2バイト余計に消費する
    • 255バイトまでは+1, 256バイトからは+2
  • CHARの末尾空白の挙動
    • 一律でカラム定義の桁数だけ消費する
    • 基本的に空白を切り詰めたものと区別しない
      • sql_mode非依存
      • 例外: LIKEのみ空白を区別する
mysql> CREATE TABLE tbl(c CHAR(4));
Query OK, 0 rows affected (0.01 sec)

mysql> drop table tbl;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE tbl(c CHAR(4) PRIMARY KEY);
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO tbl VALUES ('a');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT c='a', c='a   ', c LIKE 'a', c LIKE 'a   ' FROM tbl;
+-------+----------+------------+---------------+
| c='a' | c='a   ' | c LIKE 'a' | c LIKE 'a   ' |
+-------+----------+------------+---------------+
|     1 |        1 |          1 |             0 |
+-------+----------+------------+---------------+
1 row in set (0.00 sec)

BINARY/VARBINARY

  • バイナリ文字列を格納する
    • cf. CHAR BINARYは非バイナリ文字列を格納し、バイナリ商号順序を用いる
  • BINARYは\0でパディングされる
mysql> CREATE TABLE tbl (c BINARY(3));
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO tbl SET c = 'a';
Query OK, 1 row affected (0.01 sec)

mysql> SELECT HEX(c), c='a', c='a\0\0' FROM tbl;
+--------+-------+-----------+
| HEX(c) | c='a' | c='a\0\0' |
+--------+-------+-----------+
| 610000 |     0 |         1 |
+--------+-------+-----------+
1 row in set (0.00 sec)

BLOB/TEXT

  • VARBINARY/VARCHARとの違い
    • BLOB/TEXTは、インデックス作成時、プレフィックス長の指定が必要
    • BLOB/TEXTは、DEFAULT値をふくめられない
  • 長さ
値の長さ 値の長さ管理バイト長 合計
TINYBLOB/TINYTEXT L < 2^8 1 L+1
BLOB/TEXT L < 2^16 2 L+2
MEDIUMBLOB/MEDIUMTEXT L < 2^24 3 L+3
LONGBLOB/LONGTEXT L < 2^32 4 L+4

ENUM/SET

  • 文字列のなかま
  • SET型は数値コンテキストで取得するとビットセットを得る
    • ゆえに64要素まで(64ビット)
mysql> CREATE TABLE tbl(col SET('a','b','c','d'));
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO tbl VALUES ('a,c');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT col, col+0, BIN(col+0) FROM tbl;
+------+-------+------------+
| col  | col+0 | BIN(col+0) |
+------+-------+------------+
| a,c  |     5 | 101        |
+------+-------+------------+
1 row in set (0.00 sec)
  • a = 0b0001, c = 0b0101

データ型のストレージ要件

dev.mysql.com

  • テーブルの内部表現の最大行サイズは 65,535 バイト
  • TEXTやBLOBは外出しされるので9-12バイトしか関与しない
    • 【補】PostgreSQLのTOAST(The Oversized-Attribute Storage Technique)みたいな