Open6
TCP実装チャレンジメモ
RFC
資料
- Wikipedia - Transmission Control Protocol
-
Qiita -
Go言語を使ったTCPクライアントの作り方 -
Wikipedia - ソケット (BSD)
- OSの機能でTCPの実装が入っちゃってるよ、と言う話
- TCP自体の分かりやすい解説
実装すべきもの
- まずこれ https://golang.org/pkg/net/#Conn
- Conn interface
- これは読む必要あり https://golang.org/pkg/net/#Dial
- Dial
- あとはこの辺 https://golang.org/pkg/net/#DialTCP
- DialTCP
- (*Dialer).DialContextで使い方が見れそう https://golang.org/pkg/net/#Dialer.DialContext
- TCPAddr
- TCPConn
- TCPListener
- DialTCP
- [必読] net.DialTCPなどの使い方
DialIPして入手したConnの上に実装するイメージになりそう
(やれたら嬉しい) HTTPの動作確認に使うもの
- net/httpは自分でTCP connectionを張ってしまう。生のConnを使いたい場合はhttputilが使える https://golang.org/pkg/net/http/httputil/
ここまででわかってること
- Go本家の実装は SOCK_STREAM を使っている
- ip4 で net.Dial するとsuper user権限が求められる
- これは、Mac上で
man socket
を見ると次のように書かれていることによる -
The type SOCK_RAW, which is available only to the super-user.
- これは、Mac上で
- TCPヘッダの計算には1の補数の和が必要