데이터 통신과 네트워크 - Transport Layer2
TCP 특징
full duplex data
- 같은 커넥션 내에서 왔다갔다 패킷 가능
- TCP 최대 사이즈는 MSS
connection-oriented
flow controlled
point-to-point
reliable, in-order byte stream
pipelined
- 효율성 향상을 위해 여러개씩 보내는 파이프라인 디자인
작동방식
- 클라이언트에서 소켓 만듬 ->세그먼트 보냄->서버 세그먼트가 해당 소켓 받음->데이터 처리
- TCP는 센더의 ip주소,포트넘버,des ip주소, des 포트 넘버로 구별.
- 모든 커넥션들이 유일한 식별자를 부여할 수 있음.-> 하나의 소켓으로 커넥션 여러개 관리 가능.
TCP 세그먼트 구조
- 소스 포트, des 포트, seq num, ack num, 리시브 윈도우 등
seq num, ACK
TCP round trip, timeout
- TCP 타임아웃은 RTT(패킷 하나 보내고 ack 받는 시간)보다는 길어야
- 타임 아웃 시간을 정하는 방법으로는 추정 RTT + 4*DevRTT(safety 마진) 를 곱하는 방식이 있다.
TCP reliable 데이터 전송 비결
- 파이프 라인 세그먼트
- 누적 ack
- 타이머 세팅
- 중복 ack 처리
TCP fast retransmit
- cumulative ack 방식 사용
- 문제가 발생한 놈만 다시 보내줌
- 중복 ack 3개 나오면 다시 보내줌 -> 타임아웃 시간안에 다시 보내줘서 바로 만회가능
TCP flow control
- 받는 리시버 생각해서 보내주기
- 리시버는 (TCP 패킷 헤더에 있는) 빈공간이 얼마나 남았는지 리시브 윈도우 밸류를 알려줌
3way handshake
client
- SYN = 1, seq= client 랜덤 값
- 다시 보낼때 SYN=0, seq = 클라이언트+1, ack= 서버+1
server
- SYN = 1, seq = sever 랜덤 값, ack= 클라이언트 seq+1
커넥션으로 인한 해킹
Syn Flood Attack
- 좀비 Botnet으로 특정 서버 접속함 -> 커넥션 맺어달라고 계속 요청 -> 서버는 이것도 모르고 syn ack 좋다고 보냄 -> 헥헥 거리다가 서버 리소스 가득참 -> 진짜 필요한 사람은 요청 못받음ㅜ