일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 분당 맛집
- 서현역맛집
- 대구동성로맛집
- CU편의점 추천
- cu 편의점
- 수지 술집
- 오뚜기 라면
- 치킨 신메뉴
- 서현 맛집
- 편스토랑
- 마켓컬리 추천
- 수원 맛집
- 편의점 추천
- CU 편의점 추천
- CU편의점
- 순천맛집
- 편의점 신제품
- 황리단길디저트
- 동성로맛집
- BBQ 신메뉴
- 냉동만두 추천
- 교촌치킨 신메뉴
- 황리단길맛집
- 순천디저트
- 분당맛집
- 푸라닭
- 경주맛집
- 서현역중식
- 황리단길기념품
- 용인맛집
- Today
- Total
목록Kernel TCP IP (6)
일상 메모장
안녕하세요. 오늘은 TCP header 구조와 TCP 옵션(Options) 들에 대해서 포스팅하도록 하겠습니다. TCP header Source Port Source port number Destination Port Destination port number Sequence Number 송신자가 보내는 데이터의 시작 바이트 숫자 Acknowledgment Number 송신자에게서 받은 데이터 바이트의 + 1 Data Offset (Header length) 4byte 단위로 표시함. 일반적으로 option이 없는경우 20byte. 예를 들어 20byte 일 경우 4byte 단위로 표시되니 header length 는 5가 들어감. (5 * 4bytes == 20 bytes) 4bit 최대 값은 15(2..
안녕하세요. 오늘은 커널내부에서 네트워크 패킷을 관리하는 구조체인 sk_buff structure 를 각 네트워크 헤더별로 파싱하는 방법을 포스팅하겠습니다. 우선 각 함수를 설명하기 전에 기본적으로 sk_buff 의 멤버 변수들을 먼저 확인해보도록 하겠습니다. sk_buff 는 headroom, tailroom, 그리고 실제 데이터가 들어있는 영역이 아래와 같이 있습니다. 이 위치를 표시하기 위해 아래와 같이 head, data, tail, end 변수를 사용합니다. head ~ data 는 head room. data ~ tail 은 실제 데이터가 들어있는 room tail ~ end 는 tail room 입니다. 그리고 sk_buff 구조체는 mac header, network header(ex:IP..
Persistent timer Persistent timer는 Receive window size 가 0일때 데드락을 방지하기 위한 timer 입니다. 수신자는 자신의 receive window size를 ACK와 함께 전송하는데, 만약 수신자의 receive window 사이즈가 0라면 송신자는 persistent timer가 동작하게 됩니다. (예를들어 수신자의 user land에서 recv()함수를 호출하지 않게되면 어느순간 receive window 사이즈가 꽉차서 0가 될것입니다.) Persistent timer가 expire되면 송신자는 probe라고 부르는 특별한 세그먼트를 수신자에게 보냅니다. 이 세그먼트에는 1바이트의 새로운 데이터만 포함되어 있는데, 주기적으로 persistent tim..
안녕하세요. 오늘 포스팅할 내용은 kernel의 TCP 내부에서 사용되는 timer들 중 Retransmission timer에 대해서 알아보려고 합니다. Retransmission timerTCP 는 신뢰성 있는 전송을 하기 위해 내가 보낸 데이터에 대해서 ACK sequence를 받지 못했다면, 일정 시간이 지난 후 해당 패킷을 재전송하게 됩니다. 이때 사용하는 Timer가 Retransmission timer입니다.SYN packet을 보낸 것에 대해서 SYN+ACK를 받지 못했을 때 재전송 time과, connection 이후 데이터를 재전송할 때 time 값은 다르게 사용됩니다.SYN 일 경우RTO는 Retransmission timeout 이 발생하는 시간을 의미하는데, 이 값은 기본적으로 R..
TCP에는 sliding window 라는 용어를 사용하는데, 이는 TCP가 stream data 이고 이를 유연하게 처리하기 위해서, 각 Peer 마다 TCP session 이 생성되면 send buffer 와 recv buffer를 생성합니다. 네트워크의 특성상 전송된 패킷은 전송 도중에 손실 되거나, packet의 순서가 바뀔수 있는데, 이를 수신자 입장에서는 recv buffer를 통해서 손실된 패킷은 재전송을 유도하고 순서가 바뀌어서 도착한 패킷은 순서를 원래대로 돌리기 위해서 sequence number (추후 sequence number에 대해서 자세히 다루도록 하겠습니다) 를 사용합니다. 아래 그림은 send buffer 와 recv buffer를 표현한 그림입니다. send buffer ..
struct sk_buff sk_buff 는 Linux TCP/IP stack에서 사용하는 네트워크 패킷을 나타냅니다. sk_buff는 3가지 구성요소를 가지고 있다. sk_buff 와 linear-data 버퍼 그리고 paged-data(struct skb_shared_info)를 가지고 있습니다. sk_buff를 alloc 하고 sk_buff structure 에는 버퍼의 특정 포인터를 가르키는 4개의 변수 head, data, tail, end 가 존재합니다. 네트워크 layer 의 특성상 버퍼의 앞부분, 또는 뒷부분에 데이터들이(network header 또는 userdata) 추가 또는 삭제될 경우가 빈번하기 때문에 4개의 변수가 존재합니다. 쉽게 설명하면 버퍼의 중앙부분에 실제 데이터가 존재하..